C++string类

 了解更多关于String的用法详解,前往C++ string 用法详解 (byvoid.com)

先声明一个string 类型的变量:

string strinfo;

string类型的变量可以使用加减乘除的运算符号以及大于小于等关系符号,

对strinfo整体进行初始化时可以直接如此:

strinfo="abcd".

若要一个一个字符进行初始化时,不能用strinfo[0]=xxx,strinfo[1]=xxx...如此初始化,而要用+=要输入的字符.

其中strinfo[i]表示strinfo中下标为i的字符。

输入可以用cin>>;输出则用cout<<;

清空字符串用strinfo=""

strinfo.clear();

一、函数介绍

1.strinfo.substr(指定起始位置pos,长度n):

功能:复制子字符串,返回值为长度为n的子字符串(主要应用);其中pos为0时表示从字符串第0个字符开始。

例:

cout << strinfo.substr(first, last - first + 1)<<endl;

2.getline(cin,strinfo):

功能:从输入流中读一行,即输入一行字符串(支持输入空格)。其中第一个参数为固定参数‘cin’。

主要应用场景:读入多行带有空格的字符串时,无法用cin读入,所以会用到getline

注意:在getline之前用cin输入时,残留的回车符会被getline读取,所以要在getline前加getchar();

示例代码如下:

#include <iostream>
#include<cstdio>
#include <string>
using namespace std;
int main()
{
	string s[3];
	int n;
	cin >> n;
	getchar();//cin不读回车,把回车读掉,避免getline读回车
	for (int i = 0; i < n; i++)
	{
		getline(cin, s[i]);
	}
	for (int i = 0; i < n; i++)
	{
		cout << s[i] << endl;
	}
	return 0;
}

 3.find系列

find 查找
rfind 反向查找
find_first_of 查找包含子串中的任何字符,返回第一个找到字符的下标
find_first_not_of 查找不包含子串中的任何字符,返回找到字符的下标
find_last_of 查找包含子串中的任何字符,返回最后一个找到字符的下标
find_last_not_of 查找不包含子串中的任何字符,返回最后一个找到字符的下标

下标即地址;

以上所有函数的目标若未查找到,则均返回

string::npos

str=","; 

A.strinfo.find(str)表示在strinfo中寻找字符串str,

若找到则返回该字符串第一次出现的下标。

B.strinfo.rfind(str)表示在strinfo中从后往前寻找字符串str,

若找到则返回该字符串最后一次出现的下标。

find_first_of 是给定一个要查找的字符集,找到这个字符集中任何一个字符所在字符串中第一个位置。或许看一个例子更容易明白。

有这样一个需求:过滤一行开头和结尾的所有非英文字符。看看用string 如何实现:

#include <string>
#include <iostream>
using namespace std;
int main()
{
	string strinfo=" //*---Hello Word!......------";
	string strset="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
	int first = strinfo.find_first_of(strset);
	if(first == string::npos)
	{
		cout<<"not find any characters"<<endl;
		return -1;
	}
	int last = strinfo.find_last_of(strset);
	if(last == string::npos)
	{
		cout<<"not find any characters"<<endl;
		return -1;
	}
	cout << strinfo.substr(first, last - first + 1)<<endl;
	return 0;
}

这里把所有的英文字母大小写作为了需要查找的字符集,先查找第一个英文字母的位置,然后查找最后一个英文字母的位置,然后用substr 来的到中间的一部分,用于输出结果。下面就是其结果:

Hello Word

前面的符号和后面的符号都没有了。像这种用法可以用来查找分隔符,从而把一个连续的字符串分割成为几部分。

特别是当分隔符有多个的时候,可以一次指定。例如有这样的需求:

张三|3456123, 湖南
李四,4564234| 湖北
王小二, 4433253|北京
...

我们需要以 “|” “,“为分隔符,同时又要过滤空格,把每行分成相应的字段。

目标任务:把文本中的人名、号码、地名依次提取出来。

代码如下:


#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
	int i,firstc[3],lastc[3],firstn[3], lastn[3];
	string str1 = ",| ";
	string str3 = "1234567890";
	string str2[3];
	
	for (i = 0; i < 3; i++)
		getline(cin, str2[i]);
	for (i = 0; i < 3; i++)
	{
		firstc[i] = str2[i].find_first_of(str1);//find返回元素下标
		lastc[i] = str2[i].find_last_of(str1);
		firstn[i] = str2[i].find_first_of(str3);
		lastn[i] = str2[i].find_last_of(str3);
	}
	cout << firstc[0]<<endl;//last[0]==12
	for(i = 0; i < 3; i++)//人名
	{
		cout<<str2[i].substr(0, firstc[i])<<endl;
	}
		for (i = 0; i < 3; i++)//号码,由于号码前后既有空格又有其他符号所以用找数字更方便
		{
			cout << str2[i].substr(firstn[i], lastn[i]- firstn[i]+1) << endl;
		}
			for (i = 0; i < 3; i++)//地名
			{
				cout << str2[i].substr(lastc[i]+1, str2[i].size()-(lastc[i] + 1)) << endl;
			}
}

寻找中文不能用直接find_first_of()等函数,而要用间接的方式找其他符号作为端点来找中文;

寻找英文、数字、标点等时则可以直接使用一系列查找函数。

4.s.erase(x,y) 表示将字符串s从x位置起删除y个字符;

strinfo.erase(pos,n);没啥可说,n为数量;

5.s.insert(x,y) 表示将字符串y(或字符y)插入到s的x位置处

(1).strinfo.insert(pos,n,ch):在下标pos插入n个字符ch;

(2).strinfo.insert(pos,str):在下标pos插入字符串str;

(3).strinfo.insert(pos,str,pos_1,n):在strinfo下标pos插入

字符串str从下标pos_1开始提取n个字符得到的子字符串;

6.strinfo.push_back(x) 表示在s的末尾插入字符x

7.reverse(strinfo.begin(),strinfo.end()) 将字符串s翻转(实为<algorithm>中的函数)

不使用其返回值,直接使用函数reverse即可,注意其参数;

8.strinfo.size() 表示该字符串字符的数量;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值