s = "dog cat cat dog"转为二维数组c语言实现
时间: 2024-10-21 13:06:10 浏览: 13
CPP.zip_Cat Dog Dog_universetme
在C语言中,将字符串`s`转换为二维字符数组通常涉及到动态内存分配和遍历字符串的过程。以下是一个简单的示例,假设我们不知道字符串长度,所以每次添加一个新单词就分配一个新的行:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_WORDS_IN_LINE 5 // 可能的最大单词数
#define MAX_CHAR_PER_WORD 10 // 单词最大字符数
// 功能:将字符串转换为二维字符数组
void strToTwoDimCharArray(char *s, char (*array)[MAX_CHAR_PER_WORD], int *rows) {
char *word = strtok(s, " "); // 分割字符串
int row = 0;
while (word != NULL) {
if (row >= *rows) { // 判断是否需要增加行
// 扩展行数
*rows *= 2;
array = realloc(array, sizeof(char[MAX_CHAR_PER_WORD]) * *rows);
if (array == NULL) {
printf("Memory allocation failed.\n");
return;
}
}
// 将单词复制到数组中,并追加'\0'
strncpy(array[row], word, MAX_CHAR_PER_WORD - 1); // 注意最后一个元素应包含'\0'
array[row][MAX_CHAR_PER_WORD - 1] = '\0'; // 添加结束符
row++;
word = strtok(NULL, " "); // 继续分割下一个单词
}
}
int main() {
char s[] = "dog cat cat dog";
int rows = 1; // 初始行数
char (*twoDimArray)[MAX_CHAR_PER_WORD] = malloc(sizeof(char[MAX_CHAR_PER_WORD]) * rows);
// 转换并打印结果
strToTwoDimCharArray(s, twoDimArray, &rows);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < MAX_CHAR_PER_WORD; j++) {
printf("%c ", twoDimArray[i][j]);
}
printf("\n");
}
free(twoDimArray); // 释放内存
return 0;
}
```
这个程序首先使用`strtok`函数将字符串按空格分割成单词,然后逐个添加到二维字符数组中。注意这里假设了每个单词不超过10个字符。运行结束后,你需要手动释放`twoDimArray`所占用的内存。
阅读全文