字符串: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>

posted on 2013-08-15 11:20  从此无她不见月  阅读(249)  评论(0)    收藏  举报

导航