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

输入一段文本,将文本中的所有单词,存放到一个字符串数组中。(要求占用内存最少)
// 文本
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);
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值