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

来源:互联网 发布:收银软件 编辑:程序博客网 时间:2024/04/28 21:19

输入一段文本,将文本中的所有单词,存放到一个字符串数组中。(要求占用内存最少)
// 文本
getchar();
char str[200]= {0};
printf(“请输入一个文本以回车结尾”);
scanf(“%[^\n]”,str);
printf(“%s”,str);
// 用于存储单词的字符指针数组
char *str2[20] = {0};
// 计数器 用于记录空格和\0的下标
int count_3 = 0;
// 遍历文本找到空格和\0的下标
for (int i = 0 ; i < strlen(str)+1; i++) {
if (str[i]==’ ‘|| str[i]==’\0’|| str[i] == ‘,’) {
count_3++;
}
}
// 通过下标数量开辟两个数组用于存储 下标值和单词大小
int *array_3 = malloc(count_3*4);
// 存储下标差值
int *result = malloc(count_3*4);
// 计数器2 用于给下标数组赋值
int n = 0;
// 遍历数组找出下标
for (int i = 0; i < strlen(str)+1; i++) {
if (str[i]==’ ‘|| str[i]==’\0’|| str[i] == ‘,’) {
array_3[n] = i;
n++;
}
}
printf(“\n”);
// 遍历数组求出下标差值
for (int i = 0; i < count_3; i++) {
if (i==0) {
result[i] = array_3[i];
}else{
result[i] = array_3[i]-array_3[i-1];
}
}
// 通过差值给字符指针数组开辟空间
for (int i = 0; i < count_3; i++) {
str2[i] = malloc(result[i]+1);
}
// 用于存储单词变量
char temp[20] = {0};
// 计数器 用来给临时存储变量赋值
int k = 0;
// 计数器 用来表示str2下标
int j = 0;
for (int i = 0; i < strlen(str)+1; i++) {
if (str[i] != ’ ‘&& str[i] != ‘\0’ && str[i] != ‘,’) {
temp[k] = str[i];
k++;
}else{
temp[k] = ‘\0’;
strcpy(str2[j], temp);
j++;
k = 0;

    }}// 因为第一个值不好计算长度..直接调用所以这里输出单词长度时少1,在这里补一个.result[0] = result[0]+1;// 打印输出 数组for (int i = 0 ; i < count_3; i++) {    printf("第%d个单词:%s,大小为%d\n",i+1,str2[i],result[i]-1);}
0 0
原创粉丝点击