C++中字符串的常见用法
一.字符数组
(1)与字符串的区别
字符串就是字符数组加上结束符’\0’,如果定义一个字符数组,直接用“ ”赋值的话,末尾会自动添加’\0‘,也算一个空间。
(2)字符数组的读入与输出
读到空格或回车为止
输入:
char s[100];
scanf("%s",s);
scanf("%s",s+1);//从下标1开始读入
cin>>s;
cin>>s+1;
输出:
printf("%s\n",s);
printf("%s\n",s+1);
cout<<s<<endl;
cout<<s+1<<endl;
puts(s);//相当于cout<<s<<endl;
如果想要接受空格,读一整行的话
输入:
char s[100];
fgets(s,100000(最多读入的数的个数,可以设置一个较大的数字),stdin);
cin.getline(s,100);//100表示这一行最多读入多少字符
scanf("%[^\n]",s);//scanf的其他用法,一直读到\n为止,[]内容可以更换
gets(s);//现在基本不用了
(3)一些函数
以下字符串全部都是用字符数组表示的
1.strcat(字符串1,字符串2);//将字符串2链接到字符串1的后边,返回字符串1的值
2.strcat(字符串1,字符串2,长度n);//将字符串2前n个字符链接到字符串1后边,返回字符串1的值
3.strcpy(字符串1,字符串2);//将字符串2复制到字符串1,返回字符串1的值
4.strcpy(字符串1,字符串2,长度n);//将字符串2前n个字符复制到字符串1,返回字符串1的值
5.strcmp(字符串名1,字符串名2);//比较字符串1和2的大小,按字典序比较,字符串1>2就返回1,相等返回0,小于返回-1
6.strcmp(字符串名1,字符串名2,长度n);//比较字符串1和2前n个的大小,按字典序比较,字符串1>2就返回1,相等返回0,小于返回-1
7.strlen(字符串);//返回字符串的长度,不算'\0'
8.strlwr(字符串);//将大写字母全部转换成小写
9.strupr(字符串名);//将小写字母全部转换成大写
二.字符串
(1)字符串输入和输出
输入
string s;
cin>>s;
不能用scanf读入,会报错的
输出
printf("%s\n",s.c_str());//s.c_str会返回存储这个字符串的字符数组的首地址
读入一整行:
getline(cin,s);
(2)string的一些方法
s.length();//返回s的长度,会把字符串循环一遍,O(n)复杂度
s.empty();//返回s是否为空,是1否0
s.size();//返回s的长度,但是是O(1)
s.substr(begin,length);//截取以begin为下标,长度为length的字符串。其中,可以省略两个参数,这样返回整个字符串;省略第二个参数,默认返回从begin到结尾
s.find(字符);//查找是否有该字符,找到返回下标,没有返回-1
a.to_string();//其中a为int类型,将a转换成string类型
stoi(s);//把s转换成int类型
s.replace(begin,length,ss);//把下标为begin,长度为length的字符串替换为s
s.append(ss);//在后面添加ss这个字符串,也再传入两个参数来截取ss的范围
s.push_back(字符);//在末尾加上一个字符
s.pop_back();//删除末尾的一个字符
支持所有的比较操作(> = < != ==等)
支持两个string类型的相加操作。
遍历字符串每一个可以这么写:for(char c:s)
如果想改变其中的值:for(char &c:s)
(3)字面值和string
加法运算的时候,字面值和字符都会转换成string对象,直接相加就是将这些string连起来。
但是当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符的两侧的运算对象至少有一个是string
string s1=“1”+“2”;这种就是错误的,两个运算对象都不是string
string s2=s1+“1”+“2”;正确,运算顺序是从左到右
s+=“1”+“2”;错误,按照优先级先计算+,即"1"+“2”,不能这么做