gpt4 book ai didi

c - strcmp强制cmd错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:19:09 25 4
gpt4 key购买 nike

我正在编写一个程序,其目标是找到出现 X 次或更多次的字符串。

我有一个单词列表,我的输入是给一个 int 值,我们称它为 X,然后程序找到文件中出现 X 次或更多次的单词,然后,输出是 HOW MANY WORDS appear X或文件中多次。首先,我正在测试在 cmd 上写下自己的文字的功能,但它不起作用,我也不知道为什么。该程序只是停止工作并关闭。

char *str_dup(const char *s){

char *result = (char *) malloc(strlen(s) + 1);
strcpy(result, s);
return result;
}

int str_readline(FILE *f, char *s){

int result = EOF;

char *p = fgets(s, INT_MAX, f);

if (p != NULL){


result = (int) strlen(s);
if (result > 0 && s[result-1] == '\n')
s[--result] = '\0';
}

return result;
}

int strings_read(FILE *f, char **a){
int result = 0;
char line[10000];
while(str_readline(f, line) !=EOF){
a[result++] = str_dup(line);
}
return result;
}

int strings_get(char **a){
return strings_read(stdin, a);
}

int howMany(char **a, int n, int x){
int result = 0;
int howMany = 0;
for(int i=0; i<n; i++){
if(strcmp(a[i], a[i+1]) == 0){
result++;
}
else if(strcmp(a[i], a[i+1]) > 0 || strcmp(a[i], a[i+1]) < 0){
result = 0;
}
if(result >= x){
howMany++;
}

}
return howMany;
}

void test_howMany(void){
char *a[1000];
int x;
scanf("%d", &x);
int n;
while((n = strings_get(a)) != 0){
int z = howMany(a, n, x);
printf("%d\n", z);
}
}

int main(void){
test_howMany();
return 0;
}

第一个 if 表示如果字符串相等,则将结果加 1第二个意味着如果它们不相等,结果变为 0 以便它可以再次开始寻找我们有多少个相等的第三个意味着如果结果等于或高于 X 那么我们在 howMany 上还有 1 个值,这就是我想要在程序结束时。

怎么了?

最佳答案

这里主要存在三个问题。

首先,您正在阅读数组末尾:

for(int i=0; i<n; i++){
if(strcmp(a[i], a[i+1]) == 0){

i的值为n-1时,a[i+1]实际上是a[n],这是数组末尾之后的一个元素。读取数组末尾调用 undefined behavior在这种情况下,这表现为崩溃。您需要将循环更改为在 n-1 处停止:

for(int i=0; i<n-1; i++){

其次,您的算法仅比较此列表中的相邻单词。为此,您的列表需要排序,而您的代码并未这样做。

第三,假设您确实对单词进行了排序,当您找到一个新单词时,您的计数器从 0 开始。因此,当您第一次找到一个单词时,计数为 0,然后当您找到第二次出现时,计数为 1,依此类推。当你找到一个新词时,你需要从 result 开始。

关于c - strcmp强制cmd错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48505911/

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