一,string
1.头文件<string>
定义:string
是表示字符串
的字符串类
2.操作
一个简单代码
int main()
{
string s1; // 构造空的string类对象s1
string s2("hello,world"); //使用C字符串构造
string s3(10, 'a'); // 10个a构造对象
string s4(s2); //拷贝构造
string s5(s2, 9);//从s2对象下标为9的位置开始构造
cout << s1.c_str() << endl;
cout << s2.c_str() << endl;
cout << s3.c_str() << endl;
cout << s4.c_str() << endl;
cout << s5.c_str() << endl;
return 0;
}
(1)定义和初始化string对象
string s1; | 默认初始化,s1是一个空串 |
string s2(s1); | s2是s1的副本 |
string s2 = s1; | 等价于s2(s1) |
string s3("value"); | s3是字面值"value"的副本,除了最后那个空字符外 |
string s3 = "value"; | 等价于s3("value"); |
string s4(n,'c'); | 把s4初始化为由连续n个字符c组成的串 |
(2)string对象上的操作
os<<s | 将s写到输出流os当中,返回os |
is>>s | 从is中读取字符串赋给s,字符串以空白分隔,返回is |
getline(is,s) | 从is中读取一行赋给s,返回is |
s.empty() | 为空返回true,否则返回false |
s.size | 返回s中字符的个数 |
s[n] | 返回s中第n个字符的引用,位置n从0计起 |
s1+s2 | 返回s1和s2连接后的结果 |
s1=s2 | 用s2的副本代替s1中原来的值 |
s1+=s2 | 追加,把s2的内容追加到s1后面 |
s.c—str() | 转换,c++转换成c,字符串转换成字符数组 |
s1==s2 | 判断是否相等,字符完全一样则相等 |
<,<=,>,>= | 利用字符在字典中的顺序进行比较,区分大小写 |
(3)读写string对象
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
cout<<s<<endl;
return 0;
}
输入 abc
输出 abc
可以直接用输入输出流进行操作
(4)getline函数
功能:
从输入流中读入字符,存到string变量
直到出现以下情况为止:
•读入了文件结束标志
•读到一个新行
•达到字符串的最大长度
–如果getline没有读入字符,将返回false,可用于判断文件是否结束
int main()
{
string line:
while(getline(cin,line))
cout<<line<<endl;
return 0;
}
这是一个死循环程序
(5)处理string对象中的字符
函数名称 | 返回值 |
isalnum() | 如果参数是字母数字,即字母或者数字,函数返回true |
isalpha() | 如果参数是字母,函数返回true |
iscntrl() | 如果参数是控制字符,函数返回true |
isdigit() | 如果参数是数字(0-9),函数返回true |
isgraph() | 如果参数是除空格之外的打印字符,函数返回true |
islower() | 如果参数是小写字母,函数返回true |
isprint() | 如果参数是打印字符(包括空格),函数返回true |
ispunct() | 如果参数是标点符号,函数返回true |
isspace() | 如果参数是标准空白字符,如空格、换行符、水平或垂直制表符,函数返回true |
isupper() | 如果参数是大写字母,函数返回true |
isxdigit() | 如果参数是十六进制数字,即0-9、a-f、A-F,函数返回true |
tolower() | 如果参数是大写字符,返回其小写,否则返回该参数 |
toupper() | 如果参数是小写字符,返回其大写,否则返回该参数 |