2016-05-19 12 views
0

私は以下の文字列から "Apple"のみを抽出しようとしています。 「」と「/」の間にある。デリミタ間の文字列を抽出する方法はありますか?現在、 "、"の後の文字列はすべて抽出されます。C++はstd :: stringの選択部分を読み込みます

std::string test = "Hello World, Apple/Banana"; 

std::size_t found;     
found = test.find(","); 

std::string str3 = test.substr(found); 
std::cout << str3 << std::endl; 

答えて

0

一度に1ステップ。まず、コンマの後に部品を抽出します。次に、スラッシュの前に部分を抽出します。

また、substr()は、文字列の残りの部分をすべて抽出するのではなく、オプションの2番目のパラメータ、抽出する最大文字数を取ります。そのため、抽出する文字数を計算する場合は、substr()という単一の呼び出しで行うこともできます。

+1

'.find()'はオプションの開始位置をとります。これを使用してカンマの後にスラッシュの位置を見つけてから、それらを減算して部分文字列の長さを取得することができます。 – Barmar

0

最初の部分は、 "Apple"という部分文字列の始まりを見つけることです。そのためにfind()を使うことができます。これは、部分文字列の最初の文字の位置を返します。 std :: stringコンストラクタを使用して、元の文字列を開始位置と終了位置で渡すことができます。

参照 String find()String constructor

std::string extractedString = std::string(test, test.find("Apple"), sizeof("Apple") - 1); 
0

あなたはVC2013を使用する際に抽出

#include <string> 

using namespace std; 

int main(int argc, char * argv[]){ 
    string test = "Hello World, Apple/Banana"; 
    size_t f1 = test.find(','); 
    size_t f2 = test.find('/'); 
    string extracted = test.substr(f1, f2 - f1); 
} 

この意志出力, Appleの長さを見つけるために、substrの第2引数を使用することができます。 f1size_t f1 = test.find(',') + 2;に変更すると、Appleが出力されます。

関連する問題