可以输入中文。
在输入字符串时("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;
}