C语言利用ASCII码表统计字符串每个字符出现的次数


在这里插入图片描述

前言

大家好,我是yma16,本文分享用c语言统计ascii的字符出现次数。
c++语法
C++是一种流行的编程语言,其语法如下:

  1. 变量:使用关键字定义变量,例如:int、float、double、char等。变量必须在使用之前声明,并且可以被初始化。变量可以是局部的或全局的。

  2. 语句:使用分号作为语句的结束符号,例如:赋值语句、循环语句、条件语句等。C++支持多种语句和控制结构,包括if、else、switch、for、while、do-while等。

  3. 函数:使用关键字定义函数,例如:int、float、double、void等。函数接受参数并返回一个值。函数可以是内部的或外部的,并可以被重载。

  4. 类:使用class关键字定义类,包括属性和方法。类可以被继承并可以使用访问修饰符控制访问权限。

  5. 指针:指针是一种用于引用内存地址的变量类型。可以使用指针访问和修改变量的值,也可以使用指针进行动态内存分配。

  6. 数组:数组是一组具有相同类型的变量。可以使用数组下标访问单个元素,并可以使用循环访问整个数组。

  7. 文件操作: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]);	
	} 
} 

结束

本文分享到这结束,如有错误或者不足之处欢迎指出,感谢大家的阅读!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yma16

感谢支持!共勉!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值