【问题标题】:How to read input into the array of strings where no string is longer than 4 characters?如何将输入读入字符串长度不超过 4 个字符的字符串数组?
【发布时间】:2014-02-16 19:24:16
【问题描述】:

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

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

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

谢谢:)

【问题讨论】:

  • “写入字符串的一部分”是什么意思?你在找std::string::substr()吗?
  • @H2CO3 假设我有一个字符串“Snoopdooog”。那么一部分可能是Snoop,另一部分可能是dooog。而且我对使用字符串还很陌生,所以也许我正在寻找它,也许不是。
  • 您的问题模棱两可。请尝试改写或提供一些其他示例。

标签: c++ string io formatted-input


【解决方案1】:

试试这个

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

【讨论】:

  • 好的,我试过了,但没有按我的意愿工作。我进入循环,写下我的字符串的前四个字母,假设它们是 abcd。然后它再次循环,我又写了四个字母;埃夫格我的字符串现在应该是 abcdefgh,但它只是 abcd。我写的 efgh 也没有被放入字符串中。我可能解释得不够好,但这就是我想要的。 :)
  • 你想连接两个字符串吗?
  • 我尝试了这种方法来避免使用多个字符串。问题是,使用这个程序,我不知道我需要多少个字符串,它可以是 1 到 16 之间的任何数字。这就是为什么我决定制作一个最多可以包含四个字母的 16 个部分的字符串/数字,然后我可以在另一个 for 循环中一次检查四个字母。我不知道如何根据输入数字制作多个字符串。最好的办法是每次在 for 循环中创建一个新字符串并给它 4 个字母/数字。
  • 可以制作一个字符串数组吗?然后我可以使用 for 循环并使用 cin &gt;&gt; str[i]。这确实是我的程序的最佳选择。
  • 是的,你可以使用这个。
【解决方案2】:

注意:

std::string str[64];

声明一个包含 64 个 std::string 对象的数组。如果您想逐个字符地读取标准输入并用最大长度为 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 而不是数组

即:

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 向量后调用tokens.reserve(len/4 + 1); 以防止冗余内存重新分配。别忘了#include &lt;vector&gt;

【讨论】:

  • 我实际上是通过使用 char 变量而不是字符串自己解决了这个问题。我太新手了,无法理解您刚刚写的任何内容,但非常感谢您尝试提供帮助:)
猜你喜欢
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
相关资源
最近更新 更多