提问人:zach fisherman 提问时间:3/28/2021 最后编辑:sweenishzach fisherman 更新时间:3/29/2021 访问量:84
需要一些帮助来颠倒单词顺序
Need some help reversing word orders
问:
嘿,伙计们,我必须取一串单词并将它们重新排序为在 C++ 中向后排列。不是倒着拼写,而是基本上颠倒了句子。我的问题是我必须使用 cin.get() 并且我不断收到一个我似乎无法弄清楚的错误。错误是“没有重载函数的实例与参数列表匹配”,它在 cin.get 之后的“get”下说这是我的代码
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
cin.get(str, 1000);
int n = str.size();
int i, j = n;
for (i = n - 1; i >= 0; i--) {
if (str[i] == ' ') {
for (int k = i + 1; k < j; k++) {
cout << str[k];
}
cout << " ";
j = i;
}
}
for (int k = i + 1; k < j; k++) {
cout << str[k];
}
return 0;
}
答:
-1赞
sweenish
3/28/2021
#1
因为你包含并使用了 s,所以我们将使用 .<string>
std::string
std::getline()
我们还将使用 a 来存储 s。C++ 中的向量是可以在需要时增长的数组。它们可以像数组一样使用,但它们的动态特性使它们更加灵活。如果由于任何(家庭作业)原因您不能使用向量,这仍然可以使用 s 的 C 数组来实现。您只需要选择足够大的容量来处理可能的用例。并计算您实际有多少个单词。std::vector
std::string
std::string
我的代码有一些变体,您可以通过注释/取消注释来更改它们。有两种获取单词的方法。一个是单独输入的单词,另一个是将所有单词放在一行上。我还有两种方法可以颠倒词序;因此,代码的运行方式总共有四种不同。
#include <algorithm> // std::reverse()
#include <iostream>
#include <sstream> // std::istringstream
#include <string>
#include <vector>
std::vector<std::string> get_single_words() {
std::vector<std::string> words;
for (std::string tmp; std::getline(std::cin, tmp);) {
if (tmp != "") {
words.push_back(tmp);
} else {
break; // Get out of loop on empty string (pressing Enter, only)
}
}
return words;
}
std::vector<std::string> get_line_of_words() {
std::string line;
std::getline(std::cin, line);
std::istringstream sin(line);
std::vector<std::string> words;
for (std::string tmp; sin >> tmp;) {
words.push_back(tmp);
}
return words;
}
int main() {
/*
* Two methods for obtaining words, uncomment only one at a time
*/
// auto words = get_single_words();
auto words = get_line_of_words();
/*
* Two methods for printing reversed list, uncomment only one at a time
*/
// Print in reverse by moving backwards through vector
//
for (auto riter = words.rbegin(); riter != words.rend(); ++riter) {
std::cout << *riter << ' ';
}
std::cout << '\n';
// OR by reversing vector and printing normally
// (first is better for just printing)
//
// std::reverse(words.begin(), words.end());
// for (const auto& word : words) {
// std::cout << word << ' ';
// }
// std::cout << '\n';
return 0;
}
评论
std::cin
cin
cin >> str
cin.get(str, 1000);
应该是std::getline(std::cin, str)