String字符串类型(一)

c++字符串处理——string类型

1、字符概述
2、string 声明 1、string 字符串变量;2、初始化为空字符串
3.string初始化 1.赋值初始化(=)2.成员函数初始化()
4.string赋值 1、支持赋值语句= 2、string.assign()成员函数相同
5.string输入输出 1、输入:cin>> 、getline(cin,s)2、输出cout
字符串长度 1.string.size() 2、字符串的实际长度
字符串提取 1、下标运算符[] 2.string.substr(开始位置i,提取子字符串长度len)
字符串查找 1.string.find(查找字符串)2、找到,返回下标位置;没有找到,返回-1(string::npos)
字符串增加 1.初始体化 2、+=复合赋值运算符3、string.append(字符串变量或)4.string.insert(位置,子符串)
字符串减少 1、string.erase(位置,长度)
字符串替换 string.replace(位置、长度,替换字符串)
字符串排序

一、string字符串概述

1、字符串以’\0’为结束标志。
2、string类型变量的字符串长度是任意长,但受计算机内存限制。

二、string类型的声明

1、头文件:#include .
2、string变量声明:string 变量名
3、string类型变量的字符串长度是任意长,但受计算机内存限制。

//string类型声明
#include 
#include   //string类型不是内置类型

using namespace std;
int main(){
	string name;        //string是数据类型; 
	cout<<"input name:";
	cin>>name;
	cout<<"my name is "<<name<<endl;
	return 0;
} 

三、string类型的初始化

1、赋值形式:string s=“c++ ";
2、小括号形式:string s(“c++”);
3、小括号形式双参数:初始化多个相同字符 string s(10,”*“);

四、string类型赋值:=

1、赋值字符串常量:string s; s=“c++ ";
2、赋值字符串变量:string st1,st2="c++ "; st1=st2;

五、string类型的输入和输出

(一)输入:
1、cin输入:(1)空格、Tab、换行等空白是分隔符,视为一个字符串输入结束
(2)忽略导入空白符。
(3)cin>>输入对最后空白符:读取继续保留在输入流,等待输入。
(4)在读入字符串结束时添加字符串结束标识‘\0’.

/*过滤多余的空格(NOI题库)。 
  一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格。
  输入格式:1行,一个字符串(长度不超过200)。句子头和尾都没有空格。
  输出格式:过滤之后的句子
  输入样例:Hello      worold.This is c language.
  输出样例:Hello world.This is c language. 
*/ 
#include 
#include 
using namespace std;

int main(){
	string s,stemp;
	cin>>s;
	while(cin>>stemp)     
	// 大多数情况下其返回值为cin本身(非0值),只有当遇到EOF(文件结束标志)输入时,返回值为0。
     //输入EOF的方法,windows下输入ctrl+z, Linux下输入ctrl+d
	{
		s+=' '+stemp;//string赋值、+运行
	}
	cout<<s<<endl;
	return 0;	
}

2、读取一行字符串:getline(cin,变量名)
(1)getline(cin,变量名)允许读取一行且含有空格,默认为换行符结束。
(2)getline函数对换行符操作:读取而且丢弃,不保留输入流中,也不保存在字符串中。
(3)注意cin>>输入时残留在输入流的回车符。

/*统计数字字符个数(NOI题库). 
   输入1行字符,统计出其中数字字符的个数。
   输入格式:1行字符串,总长度不超过255.
   输入出格式:输出为1行,输出字符串里面数字字符的个数。
   输入样例: Peking University is set up at 1898.
   输出样例:4 
*/
#include 
#include 
using namespace std;
int main(){
	string s;
	getline(cin,s);
	int ans=0;
	for(int i=0;i<s.size();++i) 
	  //s.size()是string的成员函数,返回字符串的长度不包括字符串标志
	{
		if('0'<=s[i] && '9'>=s[i]) ans++;
	}
	cout<<ans<<endl;
	return 0;
} 

(二)输出:
使用cout输出,例子参照本文。

六、string类型的常用成员函数

(一)提取字符串单个元素或子字符串

1、单个字符提取:使用下标[]运算符,进行个字符的提取。
2、连续子字符串的提取:使用成员函数s.substr(提取开始位置i,提取长度len);

/*
  摘录文字。输入1行由字母和字符“#”组成的字符串。保证“#”出现偶次。
  从前向后看,每两个“#”字符之间的字符串是要摘录的字字。请编程把摘录的字符串连续输出。
  输入格式:1行字符串,总长度不超过100000.
  输出格式:“#"号对之间的字符
  输入样例: a#abcd#xyz#efgh#opq.
  输出样例:abcdefgh 
   
*/
#include 
#include 
using namespace std;
int main(){
	string st,outst;
	int p;
	cin>>st;
	for(int i=0;i<st.size();i++)
	{
		if(st[i]=='#')
		{
			p=i+1;
			for(i++;st[i]!='#';i++);//没有循环体,改变i++值
			outst+=st.substr(p,i-p);
		}
	}
	cout<<outst<<endl;
	return 0;
	
}
``

### (二)查找字符串
1、成员函数string.find(字符串)返回子字符串出现的位置(下标),没有找到则返回-1(一般写成string::npos)。

```cpp
/*
	选择你喜爱的水果(NOI题库)
	程序中保存了七种水果的名字,要求用户输入一个与水果有关的句子。程序在已存储的水果名字中搜索,
	是否包含七种水果的名称。如果包含,则用”Brussels sprouts“替换,并输出替换后的句子。若没出现,则输出
	"You must not enjoy fruit".
	假设七种水果的名字为:apple,bananas,peaches,cherries,pears,orange,strawerries.
	输入格式:多行,每行是一个字符串,只会出现一种水果名称,且出现一次。
	输出格式:被替换过的句子。
	输入样例:
	I really love peaches on my cereal.
	I'd rather have a candy bar
	apples are wonderful with lunch
	输出样例:
	I really love Brussels sprouts on my cereal.
	You must not enjoy fruit.
	Brussels sprouts are wonderful with lunch. 
*/
#include 
#include 
using namespace std;
string fruits[]={"apples","bananas","peaches","cherries","pears","oranges","strawberries"};
int main(){
	string s;
	while(getline(cin,s)){
		int pos,id=-1;
		for(int i=0;i<7;i++)
		{
			pos=s.find(fruits[i]) ;
			if(pos!=string::npos)
			{
				id=i;break;
			}			
		}
		
		if(-1==id) 
			cout<<"You must not enjoy fruit."<<endl;
		else
		{
			s.replace(pos,fruits[id].size(),"Brussesls sprouts");
			cout<<s<<endl;	
		}
	}
	return 0;
}

###(三)字符串增加
1、字符串“+”运算符:连接两字符串,但必须字符串变量参与(其中一个必须是string变量)。
2、字符串“+=”复合赋值运算符:
3、string.inserts(插入位置,插入字符串):在字符串当中位置插入字符串。
4、string.append(插入字符串):在字符串后面追加子字符串

#include 
#include 
using namespace std;
int main(){
	string s="22";
	s.insert(1,"+");
	s.append("=4");
	cout<<s<<endl;
	return 0;
}

运算结果为:2+2=4

(四)字符串减少

1、string.erase(开始删除字符位置,删除字符长度len)

#include 
#include 
using namespace std;
int main(){
    
	string st="My name name is hipoole.";
    st.erase(2,5);
    cout<<st<<endl;
    return 0;
}

(五)字符串替换

1.string.replace(替换开始位置,替换长度len,替换子符串):是成员函数,是删除字符串和播放字符串复合操作。

你可能感兴趣的:(c++)