【问题标题】:How do I print multiple inputs and outputs in C++?如何在 C++ 中打印多个输入和输出?
【发布时间】:2021-01-22 00:29:07
【问题描述】:

我正在尝试解决一本竞争性编程书籍中的一个问题,其中输出仅在输入最后一个输入后出现。我似乎已经搞定了逻辑,但我仍然对如何执行输入/输出部分感到困惑。

代码如下:

#include <bits/stdc++.h>

int main()
{
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(NULL);

    std::vector<int>soundex;
    std::string word;

    for(int i = 0; i < word.length(); i++)
    {
        if (word[i] == 'B'|| word[i] == 'F' || word[i] == 'P' || word[i] == 'V')
        {
            soundex.push_back(1);
        }

        if (word[i] == 'C' || word[i] == 'G' || word[i] == 'J' || word[i] == 'K' || word[i] == 'Q' || word[i] == 'S' || word[i] == 'X' || word[i] == 'Z')
        {
            soundex.push_back(2);
        }

        if (word[i] == 'D' || word[i] == 'T')
        {
            soundex.push_back(3);
        }

        if (word[i] == 'L')
        {
            soundex.push_back(4);
        }

        if (word[i] == 'M' || word[i] == 'N')
        {
            soundex.push_back(5);
        }

        if (word[i] == 'R')
        {
            soundex.push_back(6);
        }
    }

    for (int j = 0; j < soundex.size(); j++)
    {
        if (soundex[j] == soundex[j+1])
        {
            soundex.erase(soundex.begin() + 1);
        }
        std::cout << soundex[j];
    }
    std::cout << "\n";

    return 0;
}

它的行为是这样的:

输入:
KHAWN
输出:
25

输入:
PFISTER
输出:
1236

输入:
BOBBY
输出:
11

但是根据问题的说明,我需要它表现得像这样:

输入:

KHAWN 
PFISTER  
BOBBY

输出:

25  
1236  
11

【问题讨论】:

  • 您展示了一个不读取任何输入的程序。在任何情况下,只需在循环中一次一个地阅读单词。如果声明输入在一行上,请使用std::getline,然后从std::istringstream 中读取单词。哦,我建议你立即改掉包含&lt;bits/stdc++.h&gt; 的习惯。
  • 小心#include &lt;bits/stdc++.h&gt;。这个傻瓜几乎引入了整个 C++ 标准库,当您只需要三个标头时,这会产生很多开销。在运行时你可能什么都看不到,但是在调试时,这会使你的构建时间减慢一个数量级,消耗你节省的任何时间,而不是在一两次编译后输入你需要的几个标题。
  • 专注于输入或输出。在尝试多个之前成功获得单个输入(或输出)。
  • 旁注:通过竞争性编程学习 C++ 编程是一条艰难的道路。对于早期的基础知识,例如从流中读取信息,您最好使用a conventional text
  • 附带说明:if (soundex[j] == soundex[j+1]) 在最后一次循环迭代中超出范围。每次调用erase() 时,循环都会跳过一个元素。

标签: c++ input output


【解决方案1】:

使用while(cin &gt;&gt; word){ ... your code ... } 读取直到EOF(文件结束),以防每行仅包含一个单词(不允许空格)。您可以保持输出不变。

【讨论】:

  • 请注意,在控制台输入的现实世界中,通常没有文件结尾,用户会在程序中等待几分钟什么都不做,然后终止程序并报告错误或查找另一个程序。
  • @user4581301 另请注意,他正在为竞争性编程活动做准备。他正在阅读一本“竞争性编程书籍”。这是在线评委中常见的输入提取。
  • 同意,但提问者并不是唯一会阅读此问题以寻求答案的人。
  • @user4581301 也是如此。尽管如此,提问者还是给出了一些上下文,应该(必须)使用这些上下文,以便根据他/她的问题给出有用且有意义的答案。
  • 非常感谢!我已经让它在示例测试用例上正常工作,但是当我提交它时,它得到了运行时错误的判断:/必须对此进行调试,再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
相关资源
最近更新 更多