string类型的使用
string类型的声明;
— string s;
变量的输入输出;
使用cin时同C风格字符串,只能读取到空格之前
整行输入:getline(cin,s);
使用cout输出同C风格字符串
使用string需要增加头文件<string>
string类型支持的常见操作
单字符访问
s[i],访问字符串s的第i个字符
获取字符串长度:
s.length()
赋值:
支持直接赋值,如s1=s2;
字典序比较:
支持使用==、!=、>、<等关系运算符进行字符串比较
拼接:
支持使用 + 加法符号进行字符串拼接,如 ans = s1 + s2;
过滤空格
#include<iostream>
#include<string>
using namespace std;
int main() {
string s, ans; //刚声明完的字符串均为空
getline(cin, s) //整行读入字符串
int len = s.length(); //获取字符串的长度
for (int i = 0; i < len;i++) {
//只要非空格,就拼接到答案字符串后
if (s[i] != ' ') ans += s[i];
}
cout << ans << endl;
return 0;
}
字符串的不同实现方式 对比
操作 | 字符数组 | string类型 |
输入、输出 | cin\cout | cin\cout |
整行输入 | gets(s) | getline(cin,s) |
获取第i个字符 | s[i] | s[i] |
获取字符串长度 | strlen(s) | s.length() |
字符串比较 | strcmp(s1,s2) | s>t s<t ... |
字符串赋值 | strcpy(s1,s2) | s1 = s2 |
字符串拼接 | strcat(s1,s2) | s1 = s1 + s2; |
string类型支持的其他常见操作
提取字符串 s 中第 pos 个位置开始长度为 len 的某一段字符串:
– s.substr(pos, len) (长度可以省略,但是len不能省略)
在字符串 s 中从 pos 这个位置开始查找字符串 s1,得到第一次出现的位置:
– s.find(subs, pos) // 若不传入 pos,则 pos 默认为 0
把字符串 s 中从 pos 开始的连续 len 个字符替换成 字符串 s1
– s.replace(pos, len, s1)
在字符串s的pos位置前面,插入一个字符串s1
– s.insert(pos, s1);
替换错误
小明在默写的时候,把某个内容 s1 (girl) 错误拼写成了 s2 (boy),请你更正。
Dklfajsboy odasfjdojnfdsboyfjosadfjsao flkdsajfboyfads
Dklfajsgirl odasfjdojnfdsgirlfjosadfjsao flkdsajfgirlfads
#include<iostream>
#include<string>
using namespce std;
int main(){
string s, s1, s2;
getline(cin, s);
cin >> s1 >> s2;
int i, pos = 0, len2 = s2.length();
while ((i = s.find(s2, pos)) != string::npos) {
s.replace(i, len2, s1);
pos = i + len1;
}
cout << s;
return 0;
}