-4

如何继续在 for 循环中写入部分字符串?假设我有这个代码:

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

每次它进入循环,我想写字符串的四个元素。由于我编写的代码不起作用,我将如何继续进行?:P

谢谢 :)

4

2 回答 2

2

尝试这个

for( int i = 0; i < 64; i = i + 4 )
{
     for( int j = i; j < i + 4; j++ )
        cin >> str[j];
}  
于 2014-01-25T20:19:55.690 回答
0

注意:

std::string str[64];

std::string声明一个包含 64 个对象的数组。如果您想逐个字符地从标准输入中读取并用最大长度为 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. 一次读取“长”字符串(如果您的输入在一行内,请使用std::getline
  2. 用于std::string::substr将此字符串标记为长度为 4 的小字符串
    • 如果您需要将这些令牌保存在内存中,请使用std::vector而不是数组

IE :

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 回答