将文本中的所有单词,存放到一个字符串数组中。(要求占用内存最少)

时间:2023-01-04 08:13:13

有一段文本,将文本中的所有单词,存放到一个字符串数组中。(要求占用内存最少)

char strArray[] = "Lan ou is big company, I love iOS !";
//定义字符数组, 存储单个单词
char sigleWord[20] = {0};
//每个单词开辟的堆区空间的地址怎么存放? 指针数组
char *strPointer[20] = {NULL};
//查找单词, 并且每个单词开辟堆区空间进行存放
int i = 0;//记录文本字符串的下标
int j = 0;//记录临时字符数组的下标
int k = 0;//记录指针数组的下标
while (strArray[i] != '\0') {
if (strArray[i] != ' ') {
//当获取到的元素不是空格时, 将其存放在临时数组中
sigleWord[j] = strArray[i];
j++;
} else if (j != 0) {
//else处理的是, 遇到 空格时的情况, 此时如果j == 0就不必执行, 因为没有可执行的内容
sigleWord[j] = '\0';//首先在单词的末尾添加字符串结束标志 \0
//然后根据字符串的长度在堆区开辟相应的空间, 地址存储在指针数组中
strPointer[k] = malloc(strlen(sigleWord) + 1);
//接下来, 将临时字符串中存放的内容 拷贝到堆区空间
strcpy(strPointer[k], sigleWord);
k++;//指针数组下标 + 1, 处理下一个单词
j = 0;//临时数组在存储下一个单词时, 需要从头开始存, 因此, 将下标置 0
}
i++;//移动到strArray中的下一个元素
}
//输出
for (int i = 0; i < k; i++) {
printf("%s\n", strPointer[i]);
//使用完之后, 记得释放
free(strPointer[i]);
//防止野指针
strPointer[i] = NULL;
}