私は以下を使用して C++ で文字列を解析しています:
using namespace std;
string parsed,input="text to be parsed";
stringstream input_stringstream(input);
if (getline(input_stringstream,parsed,' '))
{
// do some processing.
}
単一の文字区切り文字で解析するのは問題ありません。しかし、文字列を区切り文字として使用したい場合はどうすればよいでしょうか。
例: 分割したい:
scott>=tiger
区切り文字として を使用する>=
と、scott と tiger を取得できます。
ベストアンサー1
あなたはstd::string::find()
関数を使用して文字列区切り文字の位置を見つけ、std::string::substr()
トークンを取得します。
例:
std::string s = "scott>=tiger";
std::string delimiter = ">=";
std::string token = s.substr(0, s.find(delimiter)); // token is "scott"
この関数は文字列内で
find(const string& str, size_t pos = 0)
の最初の出現位置を返す。str
npos
文字列が見つからない場合。この関数は、位置 から始まり長さ の
substr(size_t pos = 0, size_t n = npos)
オブジェクトの部分文字列を返します。pos
npos
複数の区切り文字がある場合は、1 つのトークンを抽出した後、それを (区切り文字も含めて) 削除して、後続の抽出を続行できます (元の文字列を保持する場合は、 を使用しますs = s.substr(pos + delimiter.length());
)。
s.erase(0, s.find(delimiter) + delimiter.length());
この方法では、各トークンを取得するために簡単にループできます。
完全な例
std::string s = "scott>=tiger>=mushroom";
std::string delimiter = ">=";
size_t pos = 0;
std::string token;
while ((pos = s.find(delimiter)) != std::string::npos) {
token = s.substr(0, pos);
std::cout << token << std::endl;
s.erase(0, pos + delimiter.length());
}
std::cout << s << std::endl;
出力:
scott
tiger
mushroom