文字列の一部を for ループ内に書き込むにはどうすればよいでしょうか。このコードがあるとしましょう:
string str[64];
for( int i = 0; i < 64; i = i + 4 )
{
cin >> str[i];
}
ループに入るたびに、文字列の 4 つの要素を書きたいと思います。私が書いたコードが機能しないので、どうすればそれを実行できますか? :P
ありがとう :)
文字列の一部を for ループ内に書き込むにはどうすればよいでしょうか。このコードがあるとしましょう:
string str[64];
for( int i = 0; i < 64; i = i + 4 )
{
cin >> str[i];
}
ループに入るたびに、文字列の 4 つの要素を書きたいと思います。私が書いたコードが機能しないので、どうすればそれを実行できますか? :P
ありがとう :)
ご了承ください:
std::string str[64];
64 個のstd::string
オブジェクトの配列を宣言します。標準入力から 1 文字ずつ読み取り、この配列を最大長 4 の文字列で埋めたい場合は、次のようになります。
char c;
for (int i = 0, j = 0; std::cin >> c && i < 64; ++j) {
str[i].push_back(c);
if (j == 3) {
i++;
j = 0;
}
}
ただし、反対のことも検討してください。
std::getline
)std::string::substr
この文字列を長さ 4 の小さな文字列にトークン化するために使用しますstd::vector
は、配列の代わりに使用しますすなわち:
std::string line;
if (std::getline(std::cin, line))
{
size_t lineLen = line.length();
std::vector<std::string> tokens;
for (int i = 0; i < lineLen; i = i + 4)
tokens.push_back(line.substr(i,4));
for (size_t i = 0; i < tokens.size(); ++i)
std::cout << tokens[i] << ", ";
}
冗長なメモリの再割り当てを防ぐために、ベクトルが構築されtokens.reserve(len/4 + 1);
た後に呼び出すことも検討してください。tokens
そして忘れないでください#include <vector>
。