W.02 字符与字符串初步

字符与字符串初步

字符

声明一个字符变量

类似于 int, 我们有 char 类型来声明一个字符变量。在赋值时使用单引号包裹字符。例如:char c='+';

字符的输入输出与 int 类似。值得一提的是,在 cincout 中,不同类型的变量是可以一次性输入,输出的。例如:

int a;
char c;
cin>>a>>c;

字符可以是 0~9 的数字,可以是大小写字母,还可以是 + - " / 等等。

整数与字符转换

最通用的信息规范 ASCII 码(美国信息交换标准代码)规定了每个字符对应什么数字。

你可以输出 (int)('c') 来获取字符对应的数字,同样的,我们也可以用数字对应回字符:(char)(67)

输出 0~9,a~z,A~Z 的 ASCII 码,看看有什么规律?(推荐选几个连续的字母实操一下)

你发现了,这三块对应的数字各自是连续的。这让我们可以通过对数字的控制来输出我们想要的字符。

比如,我们想输出第12个小写英文字母:
cout<<(char)((int)('a')-1+12);
请你思考一下这样做的正确性,并且练习一下按顺序输出全部大写字母。

另外一提,想要将字符的 ASCII 码和整数相加,可以略去“将字符变为整数”一步不写,编译器会自动转换。例如:(char)('a'-1+15)

字符练习题

  • 输入一个字符,如果是小写字母,输出对应的大写字母。如果不是,直接输出输入的字符。

  • 输入一个整数,一个字符,一个整数,字符可能为 +,-,*,/。输出对应的运算结果。(注意:输入不同的变量时必须用空格或换行分隔)

字符串

我们这里只使用 string。关于 char 来定义数组的办法较为繁琐,略去。

头文件 cstring

你代码的最上面写了一句 #include<iostream>
这代表着你引入了 iostream 的功能。

字符串的功能在另一个头文件里:cstring。
你应该在 iostream 的后面再加一行 #include<cstring>

字符串的声明

字符串,可以想象成一个字符构成的数组。不过,在定义字符串时可以不用写成数组形式,直接有一个类型:string

定义方式类似,字符串赋值时使用双引号包裹内容。
string s="haraki";

输入输出也类似。在这里,我们要讲解一种新的输入办法:读取一整行。
在之前,我们知道输入时会以空格分隔。但是当我们想输入一个带空格的字符串,如果普通输入,就只能读到前半句。

我们使用一句函数来读取一整行:getline(cin,s);

字符串和字符的关系

要获取字符串中的一个字符,与数组类似,使用方括号。注意,第一个字符的下标为 0,从 0 开始。
s[0] 是第一个字符。

字符串长度

字符串有自带的一些功能。我们只会介绍一个,更多的以后再学。

  • size 函数:字符串长度
    s 是一个字符串,使用 s.size() 获取长度。你可以把这一段看做是整数(这个函数的值是一个整数)。

例如,for(int i=0;i<s.size();i++) 遍历了字符串每个字符的下标。
注意,要用小于号,因为从 0 开始。

例题

输入一个算式,输出结果。类似于上面的练习题 2,但是输入时不加空格。

这意味着我们要做三件事:

  1. 找到运算符的位置
  2. 对运算符之前,之后的部分转换为数字
  3. 判断运算符类型,计算结果

第一点很好做:循环一遍字符串里的每个字符,判断即可。
第二点怎么办呢?

我们可以定义一个数 a=0。
对一个字符串表示了数字,我们从第一位开始:先让 a 乘以 10,再让 a 加上这一位数字。(应该加上这一位字符减去 '0',实现字符与数字的转化),然后进行下一位的分析。
如此,便可提取出数字。如果不理解,可以看下下图。

pPqbAzt.md.jpg

第三点也很简单。

练习题

  • 实现上面的例题。
  • 输入一行英文,修正格式:每段话最开始(用句号结束一句话)要大写,其他都改成小写,除了单独的 I。
  • 输入一个字符串,输出出现次数最多的一个或几个字符。
posted @ 2023-10-01 23:24  Haraki  阅读(6)  评论(0编辑  收藏  举报