字符串:string
Abstract
字符串:string。
Introduction
关于string的学习补充 C++ primer P293。
//********************************************************************
/*(C) Do what you can, with what you have, where you are.
Flie : string.cpp
Path : D:\on the way to C++\0811_about string
Author : Yung
E-mail : softpart@126.com
Date : 2013/8/11 18:24
Comment : 关于string的学习补充 C++ primer P293
*///*********************************************************************
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "abcdef";
cout << "s:" << str << endl;
//erase :删除
//1.删除标记的元素
string str1 = str;
for (string::iterator i = str1.begin(); i != str1.end(); i++)
{
if ( *i == 'c' )
{
i = str1.erase(i);
break;
}
}
cout << "str1:" << str1 << endl;
//2.删除一定数目的元素
string str2 = str;
str2.erase(0,2);//删除开始的两个元素
cout << "str2:" << str2 << endl;
string str3 = str;
str3.erase(str3.size() - 2, 2 );//删除倒数两个元素
cout << "str3:" << str3 << endl;
//3、插入元素
string str4 = str;
str4.insert(0,5,'!');//在string开始之前插入5个!
cout << "str4:" << str4 << endl;
string str5 = str;
str5.insert(str5.size(),5,'?');//在string后插入5个?
cout << "str5:" << str5 << endl;
//4、assign 复制
//s.assign(b,e) :用迭代器b和e标记范围内的元素替换s,对于string类型,改操作返回s,对于容器返回void类型
char *cp = "qu ni ma de";
string str6;
str6.assign(cp,2);
cout << "str6:" << str6 << endl;
//此时还可以在后面插入
str6.insert(str6.size(),cp + 2);
cout << "str6(i):" << str6 << endl;
//于是可以将一个string对象插入到另一个string对象里
string s1 = "ni zhen shi yi ge ";
string s2 = "big sb!";
//在s1之前插入s2
//s1.insert(s1.begin(),s2.begin(),s2.end());
//cout << "s1:" << s1 << endl;
//cout << "s2:" << s2 << endl;
//在s1之后插入s2
//s1.insert(s1.end(),s2.begin(),s2.end());
//cout << "s1:" << s1 << endl;
//cout << "s2:" << s2 << endl;
//在s1之前插入s2
//s1.insert(0,s2);
//cout << "s1:" << s1 << endl;
//cout << "s2:" << s2 << endl;
//在s1之前插入s2
s1.insert(0, s2, 0, s2.size());
cout << "s1:" << s1 << endl;
cout << "s2:" << s2 << endl;
//string特有的操作
//5、substr()
//使用substr操作可以在指定的string对象中检索需要的子串,它需要一个起始点和一个计数器
string sub = "qu ni ma de";
string sub1 = sub.substr(2,3);
cout << "sub1:" << sub1 << endl;
//6、append()和replace()
//append():字符将添加在string对象的末尾
//replace():字符将插入到指定位置,从而替换string对象中一段已经存在的字符
string astr = "Good ";
astr.append("bye!");
cout << "astr:" << astr << endl;
string astr1 = "Good ";
astr1.insert(astr1.size(),"bye!!");
cout << "astr1:" << astr1 << endl;
//replace()
string rstr = "abcdefgh";
rstr.replace(0,2,"AB");//起始第一个,2个字符替换
//rstr.erase(0,2);
//rstr.insert(0,"AB");
cout << "rstr:" << rstr << endl;
string rstr1 = "abcdefgh";
rstr1.replace(0,3,"AB");//不要求删除的文本长度与插入的相同
cout << "rstr1:" << rstr1 << endl;
//7.string对象的查找,string类提供了6种查找函数,每种都以不同形式的find命名。
//这些操作全部返回string::size_type类型的值:以下标形式标记查找匹配所发生的位置。
//或者返回string::npos的特殊值,说明查找没有匹配(string类将npos定义为大于任何有效下标的值)。
//s.find(args):在s中查找args的第一次出现
//s.rfind(args):在s中查找args的最后一次出现
//s.find_first_of(args):在s中查找args任意字符的第一次出现
//s.find_last-of(args):在s中查找args任意字符的最后一次出现
//s.find_first_not_of(args):在s中查找第一个不属于arges的字符
//s.find_last_not_of(args):在s中查找最后一个不属于arges的字符
//以上每种操作都有4个重载版本:
//(c, pos):在s中,从下标pos标记的位置开始,查找字符c。pos的默认值为0
//(s2, pos):在s中,从下标pos标记的位置开始,查找string对象s2。pos的默认值为0
//(cp, pos):在s中,从下标pos标记的位置开始,查找指针cp所指向的c风格的以空字符串结束的字符串。pos默认值为0
//(cp, pos, n):在s中,从下标pos标记的位置开始,查找指针cp所指向的数组的前n个字符。pos和n都么有默认值。
string fstr = "abcdefgh";
string::size_type fiter = fstr.find('c',2);
//string::size_type fiter = fstr.find('c');
cout << "fstr:" << fstr[fiter] << endl;
string::size_type fiter2 = fstr.find("bc");
//其实从这一句可以看到,若是字符串,所返回的是指向寻找bc的到得b的string::size_type。
cout << "fstr2:" << fstr[fiter2] << endl;
char *cp1 = "bcd";
string::size_type fiter3 = fstr.find(cp1,0);
cout << "fstr2:" << fstr[fiter3] << endl; //b
string::size_type fiter4 = fstr.find(cp1,1,3);
cout << "fstr2:" << fstr[fiter4] << endl; //b
//string对象的元素下标是从0开始计数的。区分大小写。
//8、某些查找的实例
//(1):查找并定位第一个数字
string number = "0123456789";
string name = "go2o34d";
string::size_type _fiter = name.find_first_of(number);
cout << "_fiter:" << name[_fiter] << endl;//_fiter = 2
//(2):查找出现的所有数字
string::size_type pos = 0;
while((pos = name.find_first_of(number,pos)) != string::npos)
{
cout << "pos:" << name[pos] << endl;
++pos;//指向下一个
}
//(3):查找string对象中第一个非数字字符
string::size_type _fiter2 = name.find_first_not_of(number);
cout << "_fiter2:" << name[_fiter2] << endl;//_fiter = 0
//(4):反向查找
string rstr2 = "woqunidayede";
string::size_type rpos = rstr2.rfind("ye");
cout << "rpos:" << rstr2[rpos] << endl;//'y'
//srting对象的比较:string类型定义了所有关系操作符
return 1;
}
<End>
浙公网安备 33010602011771号