-4

文字列の一部を for ループ内に書き込むにはどうすればよいでしょうか。このコードがあるとしましょう:

string str[64];
for( int i = 0; i < 64; i = i + 4 )
{
    cin >> str[i];
}

ループに入るたびに、文字列の 4 つの要素を書きたいと思います。私が書いたコードが機能しないので、どうすればそれを実行できますか? :P

ありがとう :)

4

2 に答える 2

0

ご了承ください:

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;
    }
}

ただし、反対のことも検討してください。

  1. 「長い」文字列を一度に読み取る(入力が 1 行に収まっている場合は、を使用std::getline)
  2. 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>

于 2014-01-25T20:43:36.973 に答える