初学者 - 我的“生成单词倒退”计划出了什么问题?

时间:2017-03-15 22:08:29

标签: c++ string

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string word, wordbackw;

    getline(cin, word);
    int size = word.size();

    for (int i = 0; i < size ; i++)
        word[size-1-i] = wordbackw[i];

    cout << wordbackw << endl;

    return 0;
}

cmd中唯一出现的是我的输入。

感谢您的帮助。

编辑:抱歉,忘了将cout添加到代码中。

4 个答案:

答案 0 :(得分:2)

您必须先将wordbackw调整为与word相同的尺寸:

  • 您可以在循环前初始化wordbackw = word;并在word打印出结果。

  • 或者你可以在循环之前调整wordbackw的大小并将word个字母复制到wordbackw个字母(你现在就做对决),然后在{{1 }}

答案 1 :(得分:0)

您缺少任何类型的代码来显示反转的字符串。你只是把它在内存中反转了。

尝试添加内容以在反转后显示文本,例如

cout << wordbackw;

哦,好吧,你的单词交换代码也会以几种方式向后看。你把它加载到word中,然后尝试将word设置为wordbackw的反向,这是空的。索引也会关闭 - 您在空字符串中分配位置,并且您通过源字符串而不是向后索引转发。所以你想要做更多的事情:

for (int i = size - 1; i >= 0 ; i--)
    wordbackw += word[i];

答案 2 :(得分:0)

对象wordbackw为空。因此,您可能不会为对象应用下标运算符。你至少应该在这个陈述中交换操作数

word[size-1-i] = wordbackw[i];

假设操作数将被正确写入。

您可以编写代替此代码段

int size = word.size();

for (int i = 0; i < size ; i++)
    word[size-1-i] = wordbackw[i];

以下

wordbackw.reserve( word.size() );

for ( auto i = word.size(); i != 0 ; i-- )
    wordbackw.push_back( word[i - 1] );

或者

wordbackw.reserve( word.size() );

for ( auto i = word.size(); i != 0 ; i-- )
    wordbackw += word[i - 1];

或者你可以在不使用循环的情况下做同样的事情。例如

wordbackw.assign( word.rbegin(), word.rend() );

答案 3 :(得分:0)

两个问题:

  1. word[size-1-i] = wordbackw[i];尝试wordbackw.push_back(word[size-1-i]);

  2. 时,您将覆盖使用不存在的字符读取的输入
  3. 阅读后,您没有在标准输出上打印任何内容。做这个 cout << wordbackw << endl;