C 为什么我的代码只计算字符串中小写字母的频率
我正在开发一个计算字符串中字符数的程序。它还统计并报告每个字母a-z的使用次数。由于某些原因,我无法理解我的程序将只计算并返回小写字母C 为什么我的代码只计算字符串中小写字母的频率,c,char,character,logical-operators,C,Char,Character,Logical Operators,我正在开发一个计算字符串中字符数的程序。它还统计并报告每个字母a-z的使用次数。由于某些原因,我无法理解我的程序将只计算并返回小写字母 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char string[100]; int c = 0, count[26] = {0}, x, charcount = 0; printf("Enter
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char string[100];
int c = 0, count[26] = {0}, x, charcount = 0;
printf("Enter a string\n");
gets(string);
while (string[c] != '\0')
{
if (string[c] >= 'a'||'A' && string[c] <= 'z'||'Z')
{
x = string[c] - 'a';
count[x]++;
}
c++;
}
for(c = 0; c < strlen(string); c++)
{
if(string[c] !=' ')
{
charcount++;
}
}
printf("The string %s is %d characters long.\n", string, charcount);
for (c = 0; c < 26; c++)
{
if(count[c] != 0)
printf("%c %d \n", c + 'A', count[c]);
}
return 0;
}
有人知道我做错了什么吗?这行代码严重损坏:
if (string[c] >= 'a'||'A' && string[c] <= 'z'||'Z')
如果应该:
if ( ((string[c] >= 'a') && (string[c] <= 'z')) || ((string[c] >= 'A') && (string[c] <= 'Z'))
但整个混乱局面可以用以下方式来取代:
#include <ctype.h>
....
if (isalpha(string[c]))
这一行代码被严重破坏:
if (string[c] >= 'a'||'A' && string[c] <= 'z'||'Z')
如果应该:
if ( ((string[c] >= 'a') && (string[c] <= 'z')) || ((string[c] >= 'A') && (string[c] <= 'Z'))
但整个混乱局面可以用以下方式来取代:
#include <ctype.h>
....
if (isalpha(string[c]))
这:
或者更好,只需使用ctype.h库中的isalpha函数来验证字符是否为字母:
#include <ctype.h>
//...
if (isalpha(string[c]))
在减去“a”之前,您需要将字母转换为小写,因此我们可以再次使用tolower:
这:
或者更好,只需使用ctype.h库中的isalpha函数来验证字符是否为字母:
#include <ctype.h>
//...
if (isalpha(string[c]))
在减去“a”之前,您需要将字母转换为小写,因此我们可以再次使用tolower:
我看到x=string[c]-“a”表示小写;大写字母的处理在哪里?string[c]>='a'| |'a'&&string[c]这能回答您的问题吗?您希望在ctypes.h中使用isalpha函数。您测试字符串[c]的逻辑完全错误。另请参阅isupper、islower和isspace。您知道,这是一种非常方便的方法,可以收集所有类型的字符(大写、小写、数字、空格、标点符号、控件等)的计数。。。只需为要计数的每个类别的字符创建一个频率数组。只需创建并初始化数组(全部为零),然后使用一个索引将字符映射到数组的一个元素,例如,如果isupperc upper[c-'A']++;依此类推。我看到x=string[c]-“a”表示小写;大写字母的处理在哪里?string[c]>='a'| |'a'&&string[c]这能回答您的问题吗?您希望在ctypes.h中使用isalpha函数。您测试字符串[c]的逻辑完全错误。另请参阅isupper、islower和isspace。您知道,这是一种非常方便的方法,可以收集所有类型的字符(大写、小写、数字、空格、标点符号、控件等)的计数。。。只需为要计数的每个类别的字符创建一个频率数组。只需创建并初始化数组(全部为零),然后使用一个索引将字符映射到数组的一个元素,例如,如果isupperc upper[c-'A']++;等等
x = tolower(string[c]) - 'a';