C++中String用法的简略总结

C++中String用法的简单总结

1. 定义和初始化
string s1;
string s1(s2);
string s1(“ABC”);
string s1(n, ’x’);//s1为x的n个副本
string s1(s2,pos,len);//s1被初始化成s2中从pos开始的len个字符的副本。


2. 读写
cin>>s;//忽略开头空白字符,到遇到空白字符为止
cout<<s;
也可以作为循环的条件,如while(cin>>s){…}>
getline(cin,line);//遇到换行符即停止返回

3. 大小和容量
s.empty();//返回bool值
s.size();//返回s里字符的个数。
注意:返回的并不是int型,而是string::size_type类型的值
for(string::size_type i=0;i!=s.size();i++)

4. 关系判断

if(s1==s2)

if(s1<=s2)//等效于区分大小写的字典顺序比较
5. 赋值,相加,连接
st1=st2;
st3=st1+st2;
st1 += st2;把st2追加到st1末尾
st3=st1 + “girl”;
st4=”girl” + st1;//错误的!

6. 获取字符
cout< 注意:下标是从0开始的。
而要注意s[s.size() - 1]则表示s的最后一个字符。

7. 修改
s1.insert(1,"MM");
s1.insert(1,str);
在s1[1]处插入字符。再来一个:
s1.insert(s1.size() , 2,’M’);//在s1的末尾插入MM(直接+=不就行了~~~)
s1.assign(s2);//用s2替换s1
s1.assign(s2,pos,len);
//用s2从pos开始的len个字符替换s1
s1.erase(pos,len);//删除s1从pos开始的len个字符
还有个替换的函数,在插入的同时删除:

s1.replace(1,3,”abcdefg”);//将s1从1开始的3个字符替换为指定字符

8. 提取字串
s.substr(pos,n);//返回从pos开始的n个字符的string
s.substr(pos);//从pos到末尾

9.内存输入输出
sprintf(str, "%d" ,i);
sscanf(str, ”%d” ,&i);

10. 查找操作
s1.find("MM");//返回第一个MM的位置
s1.rfind(“MM”);//返回最后一个MM的位置
s1.find("5,MM");//从第5个字符开始找
找到返回下标值,找不到返回4294967295
11. 比较

string s(“abcd”);
s.compare(“abcd”); //返回0
s.compare(“dcba”); //返回一个小于0的值
s.compare(“ab”); //返回大于0的值
s.compare(s); //相等
s.compare(0,2,s,2,2); //用”ab”和”cd”进行比较 小于零
s.compare(1,2,”bcx”,2); //用”bc”和”bc”比较。
12.字符处理

#include <cctype>

isalnum(s[i]) 如果s[i]是字母或数字,则为true

islower(c)小写字母

isupper(c)大写字母

tolower(c)

toupper(c)转换

isdigit(c)是数字

……

加iomanip头文件。
举例: 输出双精度数。

double a=123.456789012345;对a赋初值

(1) cout<<a;输出: 123.456

(2) cout<<setprecision(9)<<a;输出: 123.456789

(3) cout<<setprecision(6);恢复默认格式(精度为6)

(4) cout<< setiosflags(ios∷fixed);输出: 123.456789

(5) cout<<setiosflags(ios∷fixed)<<setprecision(8)<<a;输出: 123.45678901

(6) cout<<setiosflags(ios∷scientific)<<a;输出: 1.234568e+02

(7) cout<<setiosflags(ios∷scientific)<<setprecision(4)<<a; 输出: 1.2346e02

下面是整数输出的例子:

int b=123456;对b赋初值

(1) cout<<b;输出: 123456

(2) cout<<hex<<b; 输出: 1e240   

(3) cout<<setiosflags(ios∷uppercase)<<b;输出: 1E240   

(4) cout<<setw(10)<<b<<′,′<<b; 输出:     123456,123456

(5) cout<<setfill(′*′)<<setw(10)<<b;输出: **** 123456

(6) cout<<setiosflags(ios∷showpos)<<b;输出: +123456

11.string里经常用到和c的字符串数组的转换

int main()
{
string s;
char ss[100];
scanf(“%s”,&ss);
s=ss;
printf( s.c_str());
printf(“%s”,ss);
cout< cout<}

12.s.length()与s.size()有何区别?
答:完全没有区别,至少对string来说……