2017-03-15 34 views
0
#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到代码。

+0

其他人已经解释了您的代码中的错误。我只想补充一点,使用迭代器更好,并避免那些讨厌的潜在错误的错误:http://ideone.com/rufVTp – pyon

回答

0

你错过了任何一种代码来显示反转的字符串。你只是在记忆中反转它。

尝试添加一些你扭转后显示的文字,如

cout << wordbackw; 

呵呵,好了,也是你的字交换代码看起来向后一对夫妇的方式。你把它加载到单词中,然后尝试将单词设置为wordbackw的空白。此外,索引查找关闭 - 你在一个空的字符串中分配位置,并且你通过源字符串向前索引而不是向后索引。所以,你会想要做更多的东西一样:

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

您必须首先调整wordbackw到相同大小word

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

  • 或者你可以调整wordbackw循环之前和word字母复制到wordbackw字母(你现在做oposite),并在wordbackw

+0

你能证明你的意思是你的第二点吗? 另外,我做了 wordbackw [i] = word [size-1-i]; 而不是 word [size-1-i] = wordbackw [i]; ,这似乎修复了它。只是翻了两个。 – hiro

+0

@hiro是的,但翻转两个是不够的,你需要一个wordbackw.resize(word.size())在开始循环之前。如果你不这样做,wordbackw将保持为空字符串,并且访问具有索引的元素将是未定义的行为 – Christophe

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()); 
0

两个问题:

  1. 要覆盖你用不存在的字符读取输入,当你做word[size-1-i] = wordbackw[i];尝试做wordbackw.push_back(word[size-1-i]);

  2. 您没有打印任何东西阅读后的标准输出。这样做 cout << wordbackw << endl;