私はgetline
から標準入力から入力を読み込んでいますが、私はgetline
から受け取った行の各単語を調べることに興味があります。getlineからの解析結果
これを達成する最適なソリューションは何ですか?私は文字列をstringstream
に入れ、それを解析することを考えていましたが、より効果的な解決法があるのか、これがうまくいくのか疑問に思っていました。
何か提案がありがとうございます。
私はgetline
から標準入力から入力を読み込んでいますが、私はgetline
から受け取った行の各単語を調べることに興味があります。getlineからの解析結果
これを達成する最適なソリューションは何ですか?私は文字列をstringstream
に入れ、それを解析することを考えていましたが、より効果的な解決法があるのか、これがうまくいくのか疑問に思っていました。
何か提案がありがとうございます。
string.c_str()[index] 'を使用すると、string内の各単語を取得できます。
#include <iostream>
using namespace std;
int main(void)
{
string sIn;
// input
getline(cin,sIn);
for (int i=0 ; i<sIn.length() ; i++) {
// get one char from sIn each time
char c = sIn.c_str()[i];
// insert something you want to do
// ...
cout << c << endl;
}
return 0;
}
文字列の各単語を取得してcharに格納しますか?意味がありません。 –
ブーストライブラリを使用することができれば、文字列アルゴリズムの中には、行を単語にトークン化するのに便利なものがあります。
#include <iostream>
#include <string>
#include <vector>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/trim.hpp>
std::vector<std::string> split(std::string value,
const std::string& delims) {
std::vector<std::string> parts;
boost::trim_if(value, boost::is_any_of(delims));
boost::split(parts, value,
boost::is_any_of(delims), boost::token_compress_on);
return parts;
}
int main(int, char**) {
for (size_t lines = 1; !std::cin.eof(); ++lines) {
std::string input_line;
std::getline(std::cin, input_line);
std::vector<std::string> words = split(input_line, " ");
for (const std::string& word : words) {
std::cout << "LINE " << lines << ": " << word << std::endl;
}
}
}
出力例:
$ printf "test foo bar\n a b c \na b c" | ./a.out
LINE 1: test
LINE 1: foo
LINE 1: bar
LINE 2: a
LINE 2: b
LINE 2: c
LINE 3: a
LINE 3: b
LINE 3: c
あなたはそれぞれの単語を読んで興味を持っている場合は、なぜあなたが最初の場所で行を取得するのでしょうか?ちょうどシンプルなシン>>文字列、それはスペースまで読むでしょう...。構文解析の必要はありません。 –
各行には一緒に行くコマンドのセットが含まれているので、私は全体の行を取得する必要があります。各行はセットとは別にする必要があります。目標は、C++を使用してSQLスタイルのコマンドを実装することです – umalexans
最良の方法は、例を投稿することです。実際に行を読み込んで解析する場合は、getlineを使うと文字列に行を格納します。そこからスペースを調べて各単語を読み、必要なものを単語で実行するループを使用できます。 –