string类型的定义与初始化
1. string s1;//定义一个字符串 2. string s2(s1);//用s1初始化s2 3. string s3("world");//将s3初始化为"world" 4. string s4(n,'c');//将s4初始化为n个字符'c'
string类型的读写
string类型的读写就像其它类的读写一样,使用cin,cout。
使用cin读入string类型,就像用scanf();读字符数组一样,忽略开头的(制表符、换行符、空格),当再次碰到空字符就停止(并不会读取空字符)。由于读入时忽略了空字符,我们可以将其记作cin读字符串读的是单词。
1. cin>>s; //输入" Hello world!" 2. cout<<s;//返回"Hello"
如果我们需要读取的是句子,可以使用getline函数。getline的原型是:getline(cin,s); cin指的是读入流,一般情况下我们直接写cin即可,s是字符串,即将我们读入的东西存放在字符串s中。
1. getline(cin,s); //输入" Hello world!" 2. cout<<s;//返回" Hello world!"
string 类型的操作函数
s.empty() 如果s为空串,则返回true,否则返回false
s.size() 返回s中字符的个数,s.length()用法与s.size()相同
s[n] 返回s中位置为n的字符,位置从0开始计数(可将值赋给s[n])
s1+s2 把s1和s2连接成一个新字符串,返回新生成的字符串
s1=s2 把s1内容替换为s2的副本
v1==v2 比较v1与v2 的内容,相等则返回true ,否则返回false
!=,<,<=,>和>= 保持这些操作符惯有的含义
string字符串的相加
1. string s1("Hello "); 2. string s2("world!\n"); 3. s1+=s2; 4. cout<<s1;//输出"Hello world!"且换行
1. string s1("Hello "); 2. string s2("world!"); 3. string s3=s1+",";//合法 s3="Hello ," 4. //string s4="hello "+"world!";//非法操作 5. string s5=s1+","+"world!" ;//合法 s5="Hello ,world!" 6. //自左向右结合,s1+"," 变成一个字符串类型,然后再与"world"连接 7. //string s6="hello"+","+s2;//非法,因为"hello"与","都是字符数组类型
string字符串的下标
1. string str="2+2=4"; 2. cout<<str[1]<<endl;//输出"+" 3. str[1]='*'; 4. cout<<str;//输出"2*2=4"
string 其它一些常用操作:
s.insert(pos,s2) 在s下标为pos的元素前插入string类型s2
s.substr(pos,len) 返回一个string类型,它包含s中下标为pos起的len个字符
s.erase(pos,len) 删除s中下标为pos开始的len个字符
s.replace(pos,len,s2) 删除s中下标为pos的len个字符,并在下标为pos处插入s2
s.find(s2,pos) 在s中以pos位置起查找s2第一次出现的位置,若查找不到返回string::npos
s.c_str() 返回一个与s字面值相同的C风格的字符串临时指针
1. string s1="1234",s2="4321"; 2. cout<<s1+s2<<endl;//输出"12344321" 3. int a,b; 4. sscanf(s1.c_str(),"%d",&a);//sscanf()的作用是从字符数组中读入 5. sscanf(s2.c_str(),"%d",&b); 6. cout<<a+b<<endl;//输出"5555"
同样也可以利用sprintf()将数据输入到sprintf()。sscanf()/sprintf()的用法与scanf()/printf相同,只是在参数中第一个加个字符数组。