前言
大家好,我是yma16,本文分享用c语言统计ascii的字符出现次数。
c++语法
C++是一种流行的编程语言,其语法如下:
- 变量:使用关键字定义变量,例如:int、float、double、char等。变量必须在使用之前声明,并且可以被初始化。变量可以是局部的或全局的。
- 语句:使用分号作为语句的结束符号,例如:赋值语句、循环语句、条件语句等。C++支持多种语句和控制结构,包括if、else、switch、for、while、do-while等。
- 函数:使用关键字定义函数,例如:int、float、double、void等。函数接受参数并返回一个值。函数可以是内部的或外部的,并可以被重载。
- 类:使用class关键字定义类,包括属性和方法。类可以被继承并可以使用访问修饰符控制访问权限。
- 指针:指针是一种用于引用内存地址的变量类型。可以使用指针访问和修改变量的值,也可以使用指针进行动态内存分配。
- 数组:数组是一组具有相同类型的变量。可以使用数组下标访问单个元素,并可以使用循环访问整个数组。
- 文件操作:C++可以打开和关闭文件,并可以读写文件内容。
以上是C++的基础语法。同时,C++还有大量的标准库和第三方库,可以方便地实现各种功能。
c++输入输出示例
下面是一个简单的 C++ 输入输出示例:
#include <iostream> using namespace std; int main() { int a, b, c; cout << "请输入三个整数:"; cin >> a >> b >> c; cout << "这三个数的和是:" << a + b + c << endl; return 0; }
运行结果:
请输入三个整数:1 2 3 这三个数的和是:6
在这个示例中,我们使用了 cout
对象向屏幕输出提示信息和计算结果。我们还使用了 cin
对象从用户输入中获取三个整数,并将它们相加输出。注意,我们使用 >>
运算符来从 cin
读取值,使用 <<
运算符将值输出到 cout
。通过这些简单的输入输出操作,我们可以实现与用户进行交互并执行基本计算。
题目
在C语言里面写个能够统计并打印字符串中字符出现次数
输入一个字符串,输出该字符串中字符出现次数最多的次数。
思路:
遍历一次字符串统计,所有字符出现的次数,对比。
具体思路:
“定义两个char数组,输入,赋值给另一个字符数组
通过一个for循环嵌套两个for循环,比较,相同的值数组赋值=‘*’。
然后判断当数组值不等于0的时候和原数组进行比较再打印输出”
思路一
模拟过程
代码块
c++ 代码如下:
#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); } } }
运行正确
思路二
利用ascii的规则,所有的字符都出现在ascii中
这种方式更加简单粗暴,直接利用相同字符对应的数字一样作为数组下标,进行自加
想法很新颖,代码量比较少,效率高。
代码块如下:
其中int(s[i])是将字符换为ascii下标
#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打印的
这是安装ascii的顺序打印的
优化思路
优化打印顺序,记录统计的顺序
代码块如下:
#include<stdio.h> #include<string.h> #define maxsize 100 int main(void){ char s[maxsize]; scanf("%s",s); int length=strlen(s); char record[length]; int asc[127]={0};//a-z字符对应ASCII码表小写字母97-122,大写字母是 65-90,小写大写相差32 for(int i=0,length=length;i<length;++i){ record[i]=s[i];统计 asc[int(s[i])]++;//对应的ASCII码下标加1,同一个字母对应的下标都相同,进行计数 } for(int j=0;j<length;++j){ int asciiIndex=int(record[j]); printf("字母%c出现次数:%d\n",j,asc[asciiIndex]); } }
结束
本文分享到这结束,如有错误或者不足之处欢迎指出,感谢大家的阅读!