【发布时间】:2015-10-21 05:52:51
【问题描述】:
我正在尝试编写一个简单的 C 程序来输出单词的长度并输出它们的频率。例如,如果用户输入“嘿”,我的程序将输出 Length of word: 3 Occurrences 1,依此类推,输入更大的字符串。我似乎无法正确循环它。当看到分隔符同时计算单词当时的长度及其出现时,我想设置两个计数器,但我还没有找到一种工作方式。如何修复我的循环?我的代码如下。我会很感激任何帮助。我应该包括我的程序只对输入的一个单词正确运行,而不是整个句子或多个句子。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
const char delim[] = ", . - !*()&^%$#@<> ? []{}\\ / \"";
const int n_delim = 31;
#define SIZE 1000
int is_delim(int c);
int main(){
char string[SIZE];
int wordlength = 0, wl[SIZE];
int word = 0, i;
printf("Enter your input string:");
fgets(string, SIZE, stdin);
string[strlen(string) - 1] = '\0';
printf("Word Length\tCount\n");
int seen = 0;
int l;
for (i = 0; i < strlen(string); i++){
if (is_delim(string[i])){
wl[word++] = wordlength;
l = wordlength;
seen++;
printf("%d\t\t%d\n", l, seen);
wordlength = 0;
}
wordlength++;
}
return 0;
}
int is_delim(int c){
register int i;
for (i = 0; i < n_delim; i++)
if (c == delim[i]) return 1;
return 0;
}
【问题讨论】:
-
这段代码甚至不能编译,你永远不会在任何地方声明
i。 -
抱歉,我的错误会立即解决。
-
另外你永远不会在任何地方使用
wl,如果你用Wall编译你会看到这些东西。 -
wl 不与 wl[word++] @Linus 一起使用吗?
-
@Benny 你故意在
delim中留下空间?如果不是同时比较它也会被比较。