前言
本次我们要学习字符串的操作、字符ASII码以及位置互换等操作。并结合3个例子进行学习。学习资料来源于代码随想录的基础课程,想进一步了解细节,可以去原文看看。
1. 字符串
字符表示单个字符,每个字符用单引号扩起来,比如’a’, 而字符串是一个可变长度的字符序列,可以包含多个字符,用双引号扩起来,比如"hello"。
在c++中用string类型来表示字符串,在使用时,我们需将其头文件包含进来,如:
#include<string>
- 字符串(string)的声明和定义:
#include<string>
string a1; // 默认初始化,定一个空的字符串a1
string a2 = "hello world"; // 初始化一个值为hello world的字符串
string a3(5, 's') // 定义由连续5个字符s组成的串,即'sssss'
- 字符串(string)的操作
//字符串链接
string s1 = "hello";
string s2 = "world";
string s3 = s1 + " " + s2; // 拼接之后的字符串是"hello world", 中间加了空格
//获取字符串的长度
int length = s1.size(); // 字符串的长度即字符串中字符的个数,"hello"的长度为5
//按位读取字符串
char c1 = s1[0]; // 下标从0开始,表示字符串的第一个字符,即c1='h'
//判断字符串是否为空
if (s1.empty()) {
// 如果字符串为空则返回true, 否则返回false
}
//字符串输出
cout << s1 << endl;//表示输出s1,"hello"
cout << s1[0] << endl;//表示输出s1的第一位,'h'
此外我们在读取某个值的时候,我们常用的是cin。但是该指令在读字符串的时候,一读到空格就会停止,无法达到读取类似英语一句话的目的。这里我们可以采用getline()函数,该函数会一直读取字符,直到遇到换行符(Enter键)或文件结束符(如果从文件读取)才结束。使用时可以定位为:
string s1;
getline(cin,s);//这一行代码,会读取一行字符串并幅值给s。
getchar();//可以用来获取即将输入的一个字符
2 . 大小写转换
大小写转换,我们这里以一个实际例子进行讲解。假如有一行字符 "abc edf GHJ ",中间由一个或者多个空格符隔开,我们要将大写的转换为小写字符,小写字符转化为大写字符。最后段字符,用一个空格隔开,并输出。可以用以下代码实现
#include<iostream>
#include<string>
using namespace std;
//改变符号,大小写的ASCII码相差32,我们用字符加减32既可以实现大小写转换
string changeChar(string &s)
{
for (int i = 0; i < s.size(); i++)
{
if (s[i] >= 'a' && s[i] <= 'z')
s[i] -= 32;
else if (s[i] >= 'A' && s[i] <= 'Z')
s[i] += 32;
else
continue; //如果为空格则跳出当前循环
}
return s;
}
int main()
{
string s = "abc edf GHJ";//所定义的字符串
string result; //用来输出结果
result = changeChar(s);
for(int i=0;i<result.size();i++){
//判断当前是最后一个空格了
if(result[i] == ' ' && result[i+1] != ' '){
cout << " ";
}
//不是最后一个空格,且存在多个空格的情况,跳出当前循环
else if (result[i] == ' ' && result[i+1] == ' ') continue;
else cout << result[i];//输出转换后的值
}
return 0;
}
3. 位置互换
这里提供一个代码模板,可以实现对应位置的元素互换,核心思想就是找一个中间变量来承接交换。
void swap(char &a, char &b) { // 交换两个字符串,如果要交换两个数字,可将行参修改为对应类型
char tmp = a;
a = b;
b = tmp;
}
4. 总结
以上即是本次学习的全部内容。