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

简介: 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]);  
  } 
} 

结束

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

目录
相关文章
|
1月前
|
C语言
C语言字符(串)函数
C语言字符(串)函数
|
1月前
|
C语言 C++
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
|
1月前
|
存储 安全 编译器
深入C语言库:字符与字符串函数模拟实现
深入C语言库:字符与字符串函数模拟实现
|
2月前
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]=&quot;hello&quot;`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
|
1月前
|
C语言
C语言常见字符函数和字符串函数精讲
C语言常见字符函数和字符串函数精讲
|
6月前
|
存储 编译器 C语言
在C语言中的数组和字符串
在C语言中的数组和字符串
|
4月前
|
安全 C语言
C语言8 数组与字符串
C语言8 数组与字符串
32 0
|
存储 机器学习/深度学习 Linux
【C语言】语言篇——数组和字符串
【C语言】语言篇——数组和字符串
50 0
|
存储 C语言
C语言之指针(指针数组以及指针的指针和字符串)
C语言之指针(指针数组以及指针的指针和字符串)
95 0
|
存储 C语言
【C语言程序设计】知识点汇总3——数组、字符串数组、字符串输入输出相关注意事项
【C语言程序设计】知识点汇总3——数组、字符串数组、字符串输入输出相关注意事项
261 0
【C语言程序设计】知识点汇总3——数组、字符串数组、字符串输入输出相关注意事项