可以输入中文。
在输入字符串时("str")最后会多加\n,但不影响输出、长度判断等。
在输入字符时('c')最后不会加\n。
cin >> stra;getline(cin,stra);scanf()*输入到一个已经有值的字符串中,会将其覆盖(,长度也更新)。
printf("%s",stra.c_str()); 或 cout << stra;printf("%ns",stra.c_str());printf("%-ns",stra.c_str());printf("%m.ns",stra.c_str());printf("%-m.ns",stra.c_str());string stra;string stra(stra2);string stra("word");,错误用法:string stra="word";string stra(n,'a');对于一个已经有值的字符串,重新输入 / 定义,都可以重新覆盖值。
字符串的处理可以类比数组与类。数组从0开始,长度从1开始。
连接多个字符串,用符号+:stra=stra+" "+strb;。
但用这个方法不能写为 ,可以写为strb=stra[0]+stra[0];strb=stra[0];strb+=stra[0];,也可以写为strb=stra.substr(0,1)+stra.substr(0,1);。
更改字符串内容:stra[1]='a';。
删除字符串内容:stra.erase(2,2);,同子字符串提取,(从0开始,长度含首位),删除后,后面的内容向前补位。
字符串比较:直接比较(stra > strb),从左到右,同excel。("acaaaa" > "abzzzz")。
字符串长度:stra.length();。
子字符串提取:7为开始值,5为长度,提取stra[2]和stra[3]:stra.substr(2, 2);(从0开始,长度含首位)。
字符串查找:int answer = stra.find("word");。
若不含该值,则answer为string::npos(整数型:-1,直接输出为18446744073709551615,过程中可用answeranswer2==-1或answer2==string::npos,不可用answer2==18446744073709551615);含有该值时,answer为字符串word的第一个出现的位置,位置从0开始,同更改字符串内容。
获取字符串的始末位置:stra.begin()与stra.end(),为整数型,可搭配stra.end()-3。
题目来源:洛谷 - P1307 [NOIP2011 普及组] 数字反转
(该题不用字符串更方便)
#include <bits/stdc++.h>
using namespace std;
int main() {
string s1,s2;
cin >> s1; //字符串:输入
if(s1[0] == '-'){
if(s1.length() == 1){ //字符串:获取长度
cout << "0";
return 0;
}
cout << "-";
for(int i=s1.length()-1;i>=1;i--){ //字符串:获取长度
s2+=s1[i]; //字符串:连接、获取特定位
}
/*
if(s2[0]=='0'){
s2.erase(0,s2.find_first_not_of('0'));
}
*/
while(s2[0]=='0'){
s2.erase(0,1); //字符串:删除
}
cout << s2; //字符串:输出
}
else{
for(int i=s1.length()-1; i>=0; i--){ //字符串:获取长度
s2+=s1[i]; //字符串:连接、获取特定位
}
/*
if(s2[0]=='0'){
s2.erase(0,s2.find_first_not_of('0'));
}
*/
while(s2[0]=='0'){
s2.erase(0,1); //字符串:删除
}
cout<<s2; //字符串:输出
}
return 0;
}