怎么统计输入的一个字符串中每个字母出现的次数?
编写一个程序来统计字符串中每个字母出现的次数。
根据该思路,做个结构体,一个成员是字符,一个成员是出现个数。建立链表,对字串从头开始检查。一遇上小写字母即从表头开始核对,如果字符出现过,累加出现次数,如果没有该字符,在表尾建立新结点。
使用编写的程序如下:
/*
* 需求:统计字符串中每个字母:
* 说明:编写程序,提示用户输入一个字符串,
* 然后统计字符串中每个字母出现的个数,忽略字母的大小写。
*
* 原理:
* 1.使用String类中的toLowerCase()方法,将字符串中的大写字母转换成小写形式。
* 2.构造一个具有26个int值得数组ch ,每个元素记录一个字母出现的次数。
* 即,ch[0]记录a的个数,ch[1]记录b的个数。
* 3.对字符中的每一个字符,判断其是否小写字母,如果是,则数组中的相应计数器加1.
*
* */
ublic class CountEachLetter {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = JOptionPane.showInputDialog("Please Enter a string: ");
int[] counts = countLetters(str.toLowerCase());
String out = "";
for(int i=0;i<counts.length;i++)
{
if(counts[i]!=0)
// out += (char)('a'+i)+" appears"+counts[i]+((counts[i]==1)?"time\n":"times\n");
out +=(char)('a'+i)+":出现了"+counts[i]+"次.\n";
}
JOptionPane.showMessageDialog(null, out);
}
public static int[] countLetters(String s)
{
int[] ch = new int[26];
for(int i=0;i<s.length();i++)
{
if(Character.isLowerCase(s.charAt(i)))
ch[s.charAt(i)-'a']++;//
}
return ch;
}
}
int main()
{
int cnt[128]={0};//用来统计个数。
char str[200];//存储字符串。
int i;
gets(str);//输入字符串。
for(i = 0; str[i]!='\0'; ++i)//遍历字符串。
cnt[str[i]]++;//统计个数。
for(i=0;i<128; i ++)//遍历统计到的值。
if(cnt[i]!=0)//如果出现过则打印值,及个数。
printf("%c:%d\n", i, cnt[i]);//输出结果。
return 0;
}