统计字数、数字、大小写字符
Posted
技术标签:
【中文标题】统计字数、数字、大小写字符【英文标题】:Counting the number of words, numbers, uppercase and lowercase characters 【发布时间】:2021-12-08 15:40:01 【问题描述】:我是一名初级程序员,我发现有一个练习说:
写出一串字符,确定字数、数字、大小写字符和空格的个数。
我认为我构建了一个足够体面的程序并且它确实有效!
问题是当我尝试运行它时,结果并不完全正确。
例如;当我写信时:HI MY name is Ani 1 1 2 a
它说
空格 = 8。在这里更正
数字 = 3。此处也更正
大写字符 = 4。应该是 5
小写字符 = 7。应该是 9
字数 = 26。这是完全错误的
至于单词,我找到了一种新的计数方法。通过计数spaces+1
,但我想正确计数。
可以指出错误吗?
这是我到目前为止所做的
int main()
char str[1000+1];
int words = 0;
int numbers = 0;
int uppercharacters = 0;
int lowercharacters = 0;
int spaces = 0;
int i;
printf("Please enter the string of characters: ");
gets(str);
for (i = 0; str[i] != '\0'; i++)
if (str[i] > 'a' && str[i] < 'z')
lowercharacters++;
else if (str[i] > 'A' && str[i] < 'Z')
uppercharacters++;
else if (str[i] == ' ')
spaces++;
else if (str[i] > '0' && str[i] < '9')
numbers++;
else if (str[i] == ' ' && str[i + 1] != ' ');
words++;
printf("Spaces = %d\n", spaces);
printf("numbers = %d\n", numbers);
printf("Upper Case characters = %d\n", uppercharacters);
printf("Lower Case characters = %d\n", lowercharacters);
printf("Words = %d\n", words + 1);
return 0;
【问题讨论】:
您确定if(str[i]>'A' && str[i]<'Z')
中的范围正确吗?该范围的“边界”是什么?如果字符正好是“A”或“Z”会发生什么?
@FabiosaysReinstateMonica 是的。如果答案是 => 和 =
【参考方案1】:
至于单词,我找到了一种新的计数方法。通过计数
spaces+1
,但我想正确计数。
由于;
在else if()
的末尾,代码失败。
提示:启用所有警告的优秀编译器会对此发出警告。
节省时间,并启用所有警告。
// v !!!
else if(str[i]==' ' && str[i+1]!=' ');
words++;
即使改正为
else if(str[i]==' ' && str[i+1]!=' ')
words++;
它仍然失败,输入像" abc"
(前导空格)报告为两个单词。
相反,计算出现在非字母之后的字母。
char previous = '\n';
for(i=0; str[i] != '\0'; i++)
if (isalpha(str[i]) && !isalpha(previous))
words++;
previous = str[i];
如果标准函数(如 is...()
)不被允许,请创建您自己的辅助函数。
【讨论】:
【参考方案2】:您应该使用if(str[i]>='a' && str[i]<='z')
而不是if(str[i]>'a' && str[i]<'z')
。您不想从测试中排除字符 z 和 a。
【讨论】:
在我发布问题的那一刻就想通了。你能帮我数单词吗?正如我在问题中所说,我发现单词的数量是空格的数量+1,但我想说一个“正确”或这样做【参考方案3】:对于计数单词部分,请注意在您的最后一个 else if
语句之后有一个错放的分号。如果你修正了那个错字,单词的数量将不会 100% 正确,但你也许可以从那里开始工作:)
【讨论】:
对于数词部分,我已经找到了另一种解决方案。如果计算空格,则单词为空格+1。但我不明白为什么我的解决方案不起作用。在我看来,至少似乎是正确的。比如第一个字符是空格,第二个字符不是,这可能意味着我们遇到了一个单词,总数是单词+1以上是关于统计字数、数字、大小写字符的主要内容,如果未能解决你的问题,请参考以下文章