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