gpt4 book ai didi

c - C 程序中的字长频率

转载 作者:行者123 更新时间:2023-11-30 15:16:04 24 4
gpt4 key购买 nike

我正在尝试编写一个简单的 C 程序来输出单词的长度并输出它们的频率。例如,如果用户输入“hey”,我的程序将输出 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;
}

最佳答案

诀窍是 wl[n] 保存单词数长度 n.另外,您不需要继续调用 strlen()在每次迭代中,只需检查末尾的零字节。如果您启用它,优化器将为您执行此操作。奇怪的 for(;1;) 是为了循环计数最后一个字,以零字节结束。

memset(wl,0,sizeof(wl));
for(wordStart=maxLength=i=0;1;i++) {
if(is_delim(string[i]) || string[i]==0) {
int wordLength= i-wordStart;
if(wordLength>0)
wl[wordLength]++;
if(wordLength>maxLength)
maxLength= wordLength;
wordStart= i+1;
}
if(string[i]==0)
break;
}

for(i=1;i<=maxLength;i++) {
if(wl[i]>0) {
printf("%d words of length %d.\n",wl[i],i);
}
}

关于c - C 程序中的字长频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33251898/

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