我是靠谱客的博主 洁净豌豆,最近开发中收集的这篇文章主要介绍C++中常见的字符判断与处理方法前言ASCII 码判断字符范围的函数字符判断技巧总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 前言
  • ASCII 码
  • 判断字符范围的函数
    • C 语言
    • C++
  • 字符判断技巧
    • 判断两个字符互为大小写
    • 哨兵的使用
  • 总结

前言

字符串处理是编程世界中一项基础技能,特别是对于C/C++的程序员们,远没有那么多华丽的工具可以使用,大多数时候都需要一个个字符来判断和处理,甚至对于C语言来说都没有字符串类型,字符数组是其常见的等价结构,所以稳扎稳打的基本功尤其重要。

对于C++而言,确实有string这个字符串类型,在使用的时候有一些技巧和函数可以使用,比C语言要方便许多了,只是有些时候我们并不知道可以这样用,有时一些很朴素的写法会让程序更加简洁,而一些技巧的表达当明白之后也会感叹自己曾经的无知。

ASCII 码

作为字符编码的基础,ASCII码是需要先弄明白的,即使不能把所有的ASCII码对应的字符都记住,也要把常见的字母、数字、特殊字符记住,这样在处理字符问题时可以得心应手,常见的ASCII码对照表如下:

ASCII

其中需要注意的知识点:

  • 前32个为非打印控制字符,后面的字符为打印字符
  • 数字字符 '0'-'9' 对应的ASCII码范围是48-57
  • 大写字母 'A'-'Z' 对应的ASCII码范围是65-90
  • 小写字母 'a'-'z' 对应的ASCII码范围是97-122
  • NULL 对应ASCII码0,回车的ASCII码是13,换行的ASCII码是10

仔细观察这个ASCII表你会发现很多“秘密”,比如 windows 中的文件放到 linux 上打开时常常显示许多的 ^M,其实这就是r 的表现,因为在 windows 上用 rn 表示换行,而 linux 上使用 n 换行,那么多余的 r 在 linux 上就会显示成 ^M

再比如小写字母 a 和大写字母 A 中间差了32,为什么不是26呢?为什么要在中间插入几个别的字符,搞成连续的不好吗?之前没想过这个问题,但是前两天看了一个高手的代码后,我大概明白了,这个32的差距应该是一种“炫技”的表现,它可以使得许多代码逻辑变得简单。

判断字符范围的函数

C 语言

C语言中判断的字符范围的函数都在头文件 <ctype.h> 中,常见的有下面这些

  • int isalnum(int c):检查所传的字符是否是字母和数字
  • int isalpha(int c):检查所传的字符是否是字母
  • int isdigit(int c):检查所传的字符是否是十进制数字
  • int islower(int c):检查所传的字符是否是小写字母
  • int isupper(int c):检查所传的字符是否是大写字母
  • int ispunct(int c):检查所传的字符是否是标点符号字符

C++

C++ 中其实大部分还是引用C语言里的这些函数,但是头文件的名字为 <cctype>,在C++11中加了一个 int isblank(int c) 函数。

字符判断技巧

判断两个字符互为大小写

看到这个问题第一直觉是什么?很简单的问题有木有?因为知道一个字母的大小写差了32,所以会写出下面的代码:


int isOk(char x, char y) {
    return x - y == 32 || y - x == 32;
}

不过我前两天看到一段代码,它是这样写的:

    (x ^ 32) == y;

看到这里你还以为 Aa 之间差32而不是26感到迷惑吗?简单的字符编排透露着巨大的智慧。

哨兵的使用

比如取出一个字符串 string s 中所有的数字,问题很简单,但是结尾字符的处理往往体现了编程的功底,加上一个哨兵字符可以使得编程逻辑简单许多,无须再对结尾字符特殊判断。

void find(string s) {
    s = s + 'A';
    string ans;
    for (auto c : s) {
        if (isdigit(c)) ans += c;
        else {
            cout << ans << endl;
            ans = "";
        }
    }
}

总结

  • '0' 的ASCII码是48,'A' 的ASCII码是65,'a' 的ASCII码是97
  • isdigit 可以判断字符是否是数字,isalpha 可以判断字符是否为字母
  • 一个字母的大小写对应的ASCII码正好差32,判断互为大小写时可以使用异或符号 (x ^ 32) == y
  • 字符串结尾加哨兵字符可以使得处理逻辑更加简单统一,这种编程技巧在其他结构中也常常出现

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

今天看到一个一直作为榜样的知识输出者宣布财富自由,满心羡慕,是真的羡慕!关键人家比我年轻,比我工作时间还短,已经依靠短短4、5年的努力达到了自由状态,不过了解他的经历会发现他确实付出了很多,而我们大多数作为普通人太安于现状了,有时候选择比努力重要,如果选择对了又付出了加倍的努力,那……

最后

以上就是洁净豌豆为你收集整理的C++中常见的字符判断与处理方法前言ASCII 码判断字符范围的函数字符判断技巧总结的全部内容,希望文章能够帮你解决C++中常见的字符判断与处理方法前言ASCII 码判断字符范围的函数字符判断技巧总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部