利用ASCII码表统计字符串每个字符出现的次数
在C语言里面写个能够统计并打印字符串中字符出现次数心想这不是常规操作吗?
定义两个char数组,输入,赋值给另一个字符数组
通过一个for循环嵌套两个for循环,比较,相同的值数组赋值=‘*’。
然后判断当数组值不等于0的时候和原数组进行比较再打印输出”
我的代码
#include<stdio.h>
#include<string.h>
#define maxsize 100
int main(void){
char s[maxsize],s1[maxsize];
scanf("%s",s);
for(int i=0,length=strlen(s);i<length;++i){
s1[i]=s[i];
}
for(int i=0,length=strlen(s);i<length;++i){
for(int j=i+1;j<length;++j){
if(s[i]==s[j]){
s1[j]='*';
}
}
if(s1[i]!='*'){
int number=0;
for(int k=0;k<length;++k){
if(s1[i]==s[k]){
++number;
}
}
printf("%c出现次数:%d\n",s1[i],number);
}
}
}
运行正确
##但是老胡的方法更为简单粗暴,直接利用相同字符对应的数字一样作为数组下标,进行自加
想法很新颖,代码也少……服了
#include<stdio.h>
#include<string.h>
#define maxsize 100
int main(void){
char s[maxsize];
scanf("%s",s);
int asc[127]={0};//a-z字符对应ASCII码表小写字母97-122,大写字母是 65-90,小写大写相差32
for(int i=0,length=strlen(s);i<length;++i){
asc[int(s[i])]++;//对应的ASCII码下标加1,同一个字母对应的下标都相同,进行计数
}
for(int j=0;j<123;++j){
if(asc[j]!=0){
printf("字母%c出现次数:%d\n",j,asc[j]);
}
}
}
但是这个程序还有个不好的地方,没有按照输入字符串的顺序打印,而是从A-Z a-z打印的
emmm……
我觉得C的输入输出太麻烦还是C++好
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。