gpt4 book ai didi

c - 为什么 strtok() 在 C 中拆分单词并将单词限制为 7 个字符?

转载 作者:行者123 更新时间:2023-12-04 05:08:12 25 4
gpt4 key购买 nike

过去两天我一直在到处寻找,无法弄清楚这一点。这是输出的一个小示例:

它应该读作“并找到乐趣”:



f

工业

一个



租赁

================

长度计数

================

1 9054

2 10102

3 9336

4 5944

5 3311

6 1656

7 1292

================

平均 2.86

================

下面是代码:

#include <stdio.h>
#include <stdlib.h>
#include<string.h>

#define DELIM " ,.;:'\"&!? -_\n\t\0"

int process(int *count, char *buffer);
int printOut(int *count);

int main() {
char *buffer = (char *) calloc(1, 50*sizeof(char*));
int *count =(int*) calloc(50, 50*sizeof(long));

while (fgets(buffer, sizeof buffer, stdin)) {
process(count, buffer);
}

printOut(count);
free(count);
return 0;
}

int process(int *count, char *buffer) {
int word_len=0, i;
char *pch;
pch = strtok(buffer, DELIM);
while (pch != NULL) {
for(i=0; pch[i] != '\0'; i++) {
word_len++;
}
count[word_len]++;
word_len=0;
printf("%s\n", pch);
pch = strtok(NULL, DELIM);
}
return 0;
}

int printOut(int *count) {
int i;
double num=0;
double total=0;
double average=0;
printf("================\n");
printf("len count\n");
printf("================\n");
for(i=0;i<50;i++){
if(count[i]!=0){
num=count[i]+num;
total=total+(count[i]*i);
printf("%d %d\n",i,count[i]);
}
}
average = total/num;
printf("================\n");
printf("average %.2f\n", average);
printf("================\n");
return 0;
}

最佳答案

这是错误的:

 char *buffer = (char *) calloc(1, 50*sizeof(char*));

应该是:
 sizeof(char) // or since this is always 1: 'calloc(1, 50)'

但真正的问题在这里:
fgets(buffer, sizeof buffer, stdin);

sizeof 缓冲区是 4(或任何 sizeof 指针),因为它是一个指针,你需要这样做:
fgets(buffer, 50, stdin);

还有 sizeof(long)在 calloc 调用 count不是重点,你需要 sizeof(int)否则,您可能会分配更多的字节(取决于体系结构)。所以这可以是:
int *count =(int*) calloc(50, sizeof(int));

关于c - 为什么 strtok() 在 C 中拆分单词并将单词限制为 7 个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15236755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com