gpt4 book ai didi

c - 这个程序有什么问题?分词程序

转载 作者:太空宇宙 更新时间:2023-11-04 02:42:58 26 4
gpt4 key购买 nike

我对此有点陌生,所以我坚持做一些可能非常简单的事情。

在这个程序中,我试图将数组中的每个单词以及任何句点、逗号或分号分隔成二维数组。但是,它只重印了一行中的句子。我做了几个测试,第一个 for 循环似乎永远无法识别空格、逗号、句点或分号。有人可以帮忙吗?

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

int main()
{
char wordProblem[1024];
char wordProblemWords[200][20];

printf("Please enter a word problem.\n");

fgets ( wordProblem, 1024, stdin );
int length = strlen (wordProblem);
int i;
int wordNumber = 0;
int letterOfWord = 0;
for ( i = 0; i < length; i++){
if (wordProblem[i]==" ") {
++wordNumber;
letterOfWord = 0;
}else if (wordProblem[i]=="." || wordProblem[i]=="," || wordProblem[i]==";"){
++wordNumber;
letterOfWord = 0;
wordProblemWords[wordNumber][letterOfWord] = wordProblem[i];
wordNumber;
letterOfWord = 0;
}else{
wordProblemWords[wordNumber][letterOfWord] = wordProblem[i];
++letterOfWord;
}
}

int j;
for (j = 0; j <= wordNumber; j++){

printf("%s", wordProblemWords[j]);
printf("\n");
}
return 0;
}

编辑:我稍微更改了程序,问题就解决了。如果您想纠正任何其他问题(我敢肯定有很多),请使用这里的新代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>//based on what user3629249 said

int main()
{
char wordProblem[1024];
char wordProblemWords[200][20];

printf("Please enter a word problem.\n");

fgets ( wordProblem, 1024, stdin );
int length = strlen (wordProblem);
int i;
int wordNumber = 0;
int letterOfWord = 0;
for ( i = 0; i <= length; i++){
if (wordProblem[i]==' ') { //single quotes instead of double (tivn)
wordProblemWords[wordNumber][letterOfWord] = '\0';//added this to have a null at the end of the string, removes gibberish
++wordNumber;
letterOfWord = 0;
}else if (wordProblem[i]=='.' || wordProblem[i]==',' || wordProblem[i]==';'){
++wordNumber;
letterOfWord = 0;
wordProblemWords[wordNumber][letterOfWord] = wordProblem[i];
wordProblemWords[wordNumber][letterOfWord] = '\0'//again to remove gibberish
}else{
wordProblemWords[wordNumber][letterOfWord] = wordProblem[i];
++letterOfWord;
}
}

int j;
for (j = 0; j <= wordNumber; j++){

printf("%s", wordProblemWords[j]);
printf("\n");
}
return 0;
}

最佳答案

您需要使用单引号来比较单个字符。双引号表示字符串。

if (wordProblem[i]==' ') {
++wordNumber;
letterOfWord = 0;
} else if (wordProblem[i]=='.' || wordProblem[i]==',' || wordProblem[i]==';'){
...

另请注意,fgets 将在结果中包含换行符。

关于c - 这个程序有什么问题?分词程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30018602/

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