最近刷AC自动机题目的时候突然发现不能直接普通 scanf("%s", &str);
(实在是我太菜了,用的太少,现在才知道)
( 记得引入 string 头文件 )
输入
- string str;
cin >> str; - string str;
getline(cin, str); - string str;
str.resize(105);
scanf("%s", &str[0]); - char data[105];
scanf("%s", data);
string str(data);
输出
- cout << str <<endl;
- printf("%s", str.data());
- printf("%s", str.c_str());
常用成员函数
- c_str() 返回字符数组
- data() 返回字符串
- empty() 返回是否为空
- size() 返回字符串长度
- length() 返回字符串长度 (和 size() 一模一样)
- substr() 得到子字符串
- find() 从前往后找子字符串
- rfind() 从后往前找子字符串
- copy() 复制全部或部分字符
- compare() 比较两个字符串
- find_first_of() 返回从前往后该字符第一次出现的位置
- find_last_of() 返回从后往前该字符第一次出现的位置
- find_first_not_of() 返回从前往后第一次出现非该字符串的位置
- find_last_not_of() 返回从后往前第一次出现非该字符串的位置
- erase() 删除部分
其中 13,14,15 可用来删除字符串两边的空格
string trim(string s)
{
s.erase(0,s.find_first_not_of(" "));
s.erase(s.find_last_not_of(" ") + 1);
return s;
}
重载运算符
可用 +,=,==,!=,<,<=,>,>=