【C++】STLコンテナ - 文字列操作⑤ (文字列検索 | 文字列を検索するfind関数 | 文字列を検索するrfind関数)






1. 文字列文字検索 - find 関数は文字列を検索します。



1. 文字列クラス検索関数のプロトタイプの説明


文字列クラスの検索関数は文字列を検索します: 文字列クラスの検索関数は、単一文字の検索に加えて、部分文字列も検索できます。文字列が見つからない場合は、-1 が返されます。 ;

  • 指定された位置から文字の検索を開始します。 文字列 string 内で、pos インデックス位置 (位置インデックス自体を含む) から開始して、次の位置にある文字 c を検索します。現在の文字列 (見つからない場合は -1 を返します)。
int find(char c,int pos=0) const;
  • 指定された位置で char* 文字列の検索を開始します。 文字列 string 内で、pos インデックス位置 (位置インデックスを含む) から始まる char* 型の文字列 s を検索します。現在の文字列の位置が見つからない場合は、-1 を返します。
int find(const char *s, int pos=0) const;
  • 指定した位置から始まる文字列 string を検索します。 文字列 string 内で、pos インデックス位置から始まる文字列型 string s を検索します (位置インデックス自体を含む)。現在の文字の文字列の位置が見つからない場合は、-1 が返されます。
int find(const string &s, int pos=0) const;

2. コード例 - 文字列検索


コード例:

#include "iostream"
using namespace std;
#include "string"

int main() {
    
    

	string s1 = "Tom And Jerry, Hello World, Tom !";

	// 从 0 位置开始 ( 包括 0 位置 ) , 统计第一次出现 Tom 字符串的位置
	int index = s1.find("Tom", 0);
	// index: 0
	cout << "index: " << index << endl;

	// 从 4 位置开始 ( 包括 4 位置 ) , 统计第一次出现 Tom 字符串的位置
	index = s1.find("Tom", 4);
	// index: 28
	cout << "index: " << index << endl;

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

の結果:

インデックス: 0
インデックス: 28
続行するには任意のキーを押してください。 . .

ここに画像の説明を挿入します


3. コード例 - 文字列の部分文字列を数える


「Tom」文字列の添え字と出現数を見つけます。

	string s1 = "Tom And Jerry, Hello World, Tom !";

まず、最初の添え字を見つけて、ループを開始します。

	// 1. 先查找出第一次下标
	int index = s1.find("Tom", 0);

次に、ループ条件を設定します。 string::npos が見つからない場合 (-1)、戻り結果が string::npos / -1 に等しくない場合、string::npos / -1 が見つかるまでループが継続します。戻ってきた。 ;

ループでは、インデックスは 3 ずつ増加し、後続のインデックスの検索を続けます。今回検索された文字列はここではスキップされます。

	while (index != string::npos)
	{
    
    
		cout << "出现 Tom 字符串 的索引 index = " << index << endl;

		// 索引自增, 继续查找后续索引, 此处跳过本次查找的字符串
		index = index + 3;

		// 继续 基于新的索引 向后查找
		index = s1.find("Tom", index);

		// 每次统计 find 结果不为 -1 , count 就自增 1
		count++;
	}

コード例:

#include "iostream"
using namespace std;
#include "string"

int main() {
    
    

	string s1 = "Tom And Jerry, Hello World, Tom !";

	//查找 "Tom" 字符串出现的 下标 和 次数
	// 1. 先查找出第一次下标
	int index = s1.find("Tom", 0);

	// 保存出现次数
	int count = 0;

	// 2. 设置循环条件 : 如果没有查到到返回 string::npos 也就是 -1
	//	  如果查找到了 返回结果不等于 string::npos / -1 就一直循环下去
	//	  直到返回 string::npos / -1 为止
	while (index != string::npos)
	{
    
    
		cout << "出现 Tom 字符串 的索引 index = " << index << endl;

		// 索引自增, 继续查找后续索引, 此处跳过本次查找的字符串
		index = index + 3;

		// 继续 基于新的索引 向后查找
		index = s1.find("Tom", index);

		// 每次统计 find 结果不为 -1 , count 就自增 1
		count++;
	}

	cout << "出现 Tom 字符串 的次数 count = " << count << endl;

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

の結果:

タム文字列が出現するインデックス Index = 0
タム文字列が出現するインデックス = 28
タム文字列が出現する回数count = 2
続行するには任意のキーを押してください。 . .

ここに画像の説明を挿入します





2. 文字列文字検索 - rfind 関数で文字列を検索します



1. String クラス rfind 関数のプロトタイプの説明


string rfind に似た関数は文字列を検索します。 指定された位置から開始して文字列内で右から左に文字 c を検索します。見つかった場合は、その位置を返します。 string 内の文字の場合、返される位置インデックスは 0 からカウントされます。見つからない場合は string::npos / -1 を返します。

  • 指定された位置から始まる文字を検索します。 string 文字列内で、npos インデックス位置 (位置インデックス自体を含む) は、現在の文字列内の文字 c の位置を右から左に検索し始めます。見つからない場合は -1 を返し、見つかった場合は文字列内の文字の位置を返します。返される位置インデックスは 0 からカウントされます。見つからない場合は returnstring::npos / -1;
int rfind(char c, int pos=npos) const;
  • 指定した位置から始まる char* 文字列を検索します。 string 文字列内で、npos インデックス位置 (位置インデックス自体を含む) 右から左に検索を開始します。char* 現在の文字列の位置に string s を入力し、見つからない場合は -1 を返し、見つかった場合は文字を返します。文字内 文字列内の位置。返される位置インデックスは 0 からカウントされます。見つからない場合は、string::npos / -1; を返します。
int rfind(const char *s, int pos=npos) const;
  • 指定した位置から始まる文字列 string を検索します。 string 文字列内で、npos から開始します。インデックス位置 (位置インデックス自体を含む) 右から左に検索を開始します。string 現在の文字列の位置に文字列 s を入力します。見つからない場合は -1 を返します。見つかった場合は、文字列を返します。の文字列位置、返される位置インデックスは 0 からカウントされます。見つからない場合は、 returnstring::npos / -1;
int rfind(const string &s, int pos=npos) const;

2. コード例 - rfind 文字列検索


コード例:

#include "iostream"
using namespace std;
#include "string"

int main() {
    
    

	string s1 = "Tom And Jerry, Hello World, Tom !";


	// 从 0 位置开始 ( 包括 0 位置 ) , 统计第一次出现 Tom 字符串的位置
	int index = s1.rfind("Tom", 0);
	// index: 0
	cout << "index: " << index << endl;

	// 从 末尾 位置开始 ( 包括 末尾 位置 ) , 统计第一次出现 Tom 字符串的位置
	index = s1.rfind("Tom", s1.length() - 1);
	// index: 28
	cout << "index: " << index << endl;


	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

の結果:

インデックス: 0
インデックス: 28
続行するには任意のキーを押してください。 . .

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/han1202012/article/details/135039666