**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
2天前关闭。
Improve this question
编写一个C++代码,从用户那里获取一个单词,并如下所示打印出来。
Enter the word: Word d rd ord Word
我试图解决这个问题;
#include <iostream>
#include <string>
using namespace std;
int main() {
string word;
cout << "Enter the word: ";
cin>>word;
for (int i = 0; i < word.length(); i++) {
for (int j = i; j < word.length(); j++) {
cout << word[j];
}
cout << endl;
}
return 0;
}
但这给出的结果为:
word
ord
rd
d
我怎样才能改变这个代码给予结果;
d
rd
ord
word
3条答案
按热度按时间qxsslcnc1#
要获得预期的输出,可以让外部循环从
word.length() - 1
向下循环到0
:注意,我将
i
和j
更改为(unsigned
)std::size_t
s,而不是(signed
)int
。std::size_t
是用于length()
成员函数的正确类型。您还可以通过完全跳过内部循环来简化它:
rnmwe5a22#
首先,这份声明
只能读取一个单词。也就是说,如果您将按照问题中所示输入
则变量
word
将仅包含一个字符串"Word"
而不是键入的完整字符串"Word d rd ord Word"
。您需要使用标准函数
std::getline
来代替运算符>>
。否则你问题中的这一行
没有任何意义。
看起来您需要按照字符串中包含的单词的长度以升序输出输入的字符串
"Word d rd ord Word"
中的单词,而不需要重复。使用标准容器
std::set
可以轻松完成此操作。这是一个演示程序。
程序输出为
如果不是这个输入
您指的是以下输入
并且想要从输入的字符串的末尾开始输出子字符串,则可以通过以下方式仅使用一个for循环和类
std::string_view
来完成程序输出与上面所示的类似(除了输入的字符串),尽管程序执行不同的操作
mpbci0fu3#
如果您养成 * 不 * 使用
i
和j
这样的变量名的习惯,而坚持使用对您 * 有意义 * 的名称,那么这会变得容易得多!你现在明白为什么你不倒着数字母了吗?这是同样的代码,但我用了更好的名字。
我会给予你一个完全不同的解决方案,只是为了说明“言出必行”的意义;也许这足以帮你修复你自己的代码!