初心者の場合、このタイプの文字列統計の質問を見ると、最初にif選択ステートメントについて考えます。次のよう
な適切な範囲の条件を実行します:( 'a' <= str [i])&&(str [i] <= 'z')
このように入力文字列を分類するために行われます。しかし、文字列内の各文字の特定の出現回数に関するその後の統計は無力です。(たとえば、最初に26文字を1つずつ数えることを選択した場合、後で数が0の場合を記述しますが、これは複雑すぎます)
このとき、特定のアルゴリズム必要とされている。
他のプログラマーのコードから教訓を得て、後続の文字は対応する式で表現できることに気づきました。
コード表示:
#include<stdio.h>
#include<string.h>
#define N 100//宏定义便于定义字符数组的宽度
int main()
{
int cnt[26]={
0},len,i,j;
char str[N];//宏定义
printf("请输入一个字符串!\n");
gets(str);
len=strlen(str);//strlen剔除'\0'
for(i=0;i<len;i++)
{
for(j=0;j<26;j++)//26个字母
{
if(str[i]=='a'+j)//此处就是一个表达式,'z'与'a'相差26,在'a'上特定加上数字即可表示相应字母
{
cnt[j]++;//这样解决了特定字母出现个数特定数组下标统计。
break;//内循环一个判定完之后暂停。等待外循环的下一个字符。
}
}
}
printf("统计结果为:\n");
for(i=0;i<26;i++)
{
if(cnt[i]!=0)
{
printf("%c:%d\n",i+'a',cnt[i]);//此处的i+'a'较str[i]更好,若是str[i]还得一一判定是否为字母,且i是记录了输入字符串中有哪些字母,在'a'之上相加个数即可表示。
}
}
return 0;
}
コード分析は、コードで詳しく説明されています。