今日のエラーシリーズ:関数substrが文字列内の段落をインターセプトします

今日の文字列傍受の経験を共有してください。

文字列の特定の「部分文字列」を最後までインターセプトした後、1つを共有します

例はタイトルのようなものです。
文字列内の文字列「I」の後のすべての文字列をインターセプトします:「aaabbb ccc、I love CSDN!」。
[例の文字列には文字「I」が1つしかありませんが、真実は同じです]

#include <iostream>
using namespace std;

int main()
{
    
    
	string str = "aaa bbb ccc , I love CSDN !";
	int pos = str.find("I"); // 在字符串str中找到字符串 "I" 出现的位置
	string str2 = str.substr(pos); // 在字符串str中,从"I" 出现的位置开始截取至结束
	cout <<"截取后的字符串为:" << str2.c_str() << endl;
}

出力:

截取后的字符串为:I love CSDN !

概要:str.substr(pos);は、posの位置から文字列の最後のビットまでの文字列を表します。

2つを共有し、文字列変数の特定のセグメントをインターセプトします

例はタイトルです:
文字列: "aaa bbb ccc、I love CSDN!"では、14番目の位置から13文字がインターセプトされます。

#include <iostream>
using namespace std;

int main()
{
    
    

	string str = "aaa bbb ccc , I love CSDN !";
	string str2 = str.substr(14,13); // 14表示要截取的字符串的开始的位置,13代表要截取的字符串的长度。
	cout << "截取后的字符串为:" << str2.c_str() << endl;
}

出力:

截取后的字符串为:I love CSDN !

要約:str.substr(pos、n); posはインターセプトされる文字列の開始位置を表し、nはインターセプトされる文字列の長さを表します。

3つ共有し、c_str()を補足します

注意深い学生は、文字列を出力すると、このように出力されることを発見したと推定されます

str2.c_str()

.c_strが最後に追加されるのはなぜですか?
追加しないと、次のようなエラーが報告されるためです。

错误	C2679	二进制“<<: 没有找到接受“std::string”类型的右操作数的运算符(或没有可接受的转换)

理由は次のとおりです。文字列型にオーバーロード<<記号がありません

したがって、文字列を出力するときは、c_str()メソッドを呼び出すことで解決できます。

4つを共有し、find()を補足します

Str.find( "I");は上記の共有で使用されます。

文字列「I」の最初の出現位置を返します

終わり:

共有することは、問題への理解を深める方法でもあります。包括的ではないかもしれませんが、間違いなく便利であり、今後も改善されていきます〜

おすすめ

転載: blog.csdn.net/hwx802746/article/details/112170506