用字符数组存放字符串容易发生数组越界的错误,而且往往难以察觉。因此,C++ 标准模板库设计了 string 数据类型,专门用于字符串处理。
string 类型的变量就是用来存放字符串的,也叫“string对象”。string 并不是 C++ 的基本数据类型,它是 C++ 标准模板库中的一个“类”。关于这一点,现在不必深究,以后会学到。这里只要学会如何使用 string 对象即可。
要使用 string 对象,必须包含头文件 <string>。
char数组:存储单字符
int数组:存储整型
字符型数组
char a[7]={'a','2','A','#','&',' '};
字符数组元素都是单个字符
字符串
char a[5]=“hello";
错误的表现形式
存储字符串的时候,数组长度要给字符串结尾’\0’留一个长度防止越界。
char a[6]=“hello";
char a[6]={“hello"};
char a[6]={'h','e','l','l','o','\0'};
字符数组的输入
输入
循环遍历将元素依次输入
char a[101];
int n;
cin>>n
for(int i=1; i<=n; i++) cin>>a[i];
直接输入
char a[101];
cin>>a;
带空格的输入
cin.getline(数组名,数组长度)
cin.getline(a,101);
gets(数组名);
头文件#include <cstdio>
注意连用cin和cin.getline()函数时,需要在中间加一个cin.ignore(); 用于清除缓存。
输出
循环遍历将元素依次输出
for(int i=0;i>n;i++) cout>>a[i];
直接输出:
cout>>a
字符数组常用函数
头文件:#include <cstring>
获取数组有效长度:strlen(数组名),strlen(a), strlen(“hello”);
- 将b字符数组拼接到a字符数组后
- 将b字符数组复制给字符数组
- 比较a字符数组和b字符数组的大小
- 反转函数
- 额外的函数
strcat(a,b)
strcpy(a,b)
strcmp(a,b)
char a[4]=”abc”;
char a[3]=”ad”;
对位比较大小, ASCII码大的该位大。
if(strcmp(a,b)>0) — a>b
if(strcmp(a,b)==0) — a=b
if(strcmp(a,b)<0) — a<b
char a[6]=”hello”;
cout<<strrev(a);
头文件: #include <cstype>
isalnum(); 验证字母和数字
isalpha(); 验证字母
isdigit(); 验证数字
islower(); 验证小写
isupper(); 验证大写
tolower(); 转换为小写
toupper(); 转换为大写
string类型字符串
“” 0个或多个字符
声明
string a;
初始化
string a=”abc”;
不带空格输入
cin>>a
使用for循环依次输入
带空格输入
getline(cin,a);
输出
cout<<a
使用for循环依次输出
获取字符串长度函数
头文件:#include <string>
length()函数
a.length();
连用cin和getline()函数时,需要在中间加一个cin.ignore();用于清除缓存。
string常用函数
头文件:#include <string>
字符串的拼接
string a,b;
a=a+b;cout<<a;
字符串的赋值
string a,b;
cin>>a;
b=a;cout<<b;
比较大小
a>=b —-> 真或者假
a==b —-> 真或者假
a<=b —-> 真或者假
a!=b —-> 真或者假
查找
str.find("ab");
//返回字符串ab在str的位置
子串
str.substr(3);
//返回[3]及以后的子串
str.substr(2,4);
//返回str[2]~str[2+(4-1)] 子串(即从[2]开始4个字符组成的字符串
替换
str.replace(2, 4, "sz");
//返回把[2]~[2+(4-1)]的内容替换为“sz”后的新字符串
.str.replace(2, 4, "abcd", 3)
//返回把[2]~[2+(4-1)]的内容替换为“abcd”前3个字符后的新字符串
插入
str.insert(2, "sz");
//从[2]位置开始添加字符串“sz”,并返回形成的新字符串
.str.insert(2, "abcd", 3)
//从[2]开始添加字符串“abcd”前3个字符,并返回形成的新字符串
.str.insert(2, "abcd", 1, 3)
//从[2]开始添加字符串“abcd”前[2]~[2+(3-1)]个字符,并返回形成的新字符串
专项练习题
- 密码翻译
- 简单密码
- 大小写字母互换
- 字符串判等
- 加密的病历单
- 验证子串
- 字符串移位包含问题
- 单词的长度
- 说反话
- 单词翻转
- 标题统计-noip2018 普及组
- ISBN 号码-noip2008 普及组
- 乒乓球-noip2003 普及组
- 多项式输出-noip2009 普及组
- 回文素数
- 素数对