我想计算给定句子中出现了多少个单词。我正在使用 C 编程语言。它不能算最后一个字。在给定的字符串中,它计算每个单词出现的次数。如果有像red green blue blue green blue
这样的句子,那么程序应该计算red 2 green 2 and blue 3
。但就我而言,它不算作 blue 3
。而不是计数 blue 2
然后 blue 1
:
red 1
green 2
blue 2
blue
1
我的代码:
#include <stdio.h>
#include <string.h>
int main(void)
{
int count = 0, c = 0, i, j = 0, k, space = 0;
char str[1000], p[500][1000], str1[200], ptr1[500][1000];
char *ptr;
fgets(str, sizeof(str), stdin);
for (i = 0;i<strlen(str);i++)
{
if ((str[i] == ' ')||(str[i] == ', ')||(str[i] == '.'))
{
space++;
}
}
for (i = 0, j = 0, k = 0;j < strlen(str);j++)
{
if ((str[j] == ' ')||(str[j] == 44)||(str[j] == 46))
{
p[i][k] = '\0';
i++;
k = 0;
}
else
p[i][k++] = str[j];
}
k = 0;
for (i = 0;i <= space;i++)
{
for (j = 0;j <= space;j++)
{
if (i == j)
{
strcpy(ptr1[k], p[i]);
k++;
count++;
break;
}
else
{
if (strcmp(ptr1[j], p[i]) != 0)
continue;
else
break;
}
}
}
for (i = 0;i < count;i++)
{
for (j = 0;j <= space;j++)
{
if (strcmp(ptr1[i], p[j]) == 0)
c++;
}
printf("%s %d\n", ptr1[i], c);
c = 0;
}
return 0;
}
最佳答案
fgets
将换行符 (\n
) 附加到 str
因此你的 str
将包含
str = "红绿蓝蓝绿蓝\n"
因此 blue
不匹配 blue\n
并且将 blue\n
视为不同的词。
在您的输出中完全显示相同
red 1
green 2
blue 2
blue //see 1 is printed on next line
1
因此修剪 \n
如下。
size_t len = strlen(str);
if (len > 0 && str[len - 1] == '\n')
str[len - 1] = '\0';
关于计算每个单词在给定句子中出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53791004/