反向多字串

时间:2015-09-30 07:34:51

标签: c++

我想要反转一个字符串。当我使用简单的cin时,字符串成功反转。但是对于多字符串我需要cin.getline。但问题是在使用cin.getline时,第一个字母没有显示在反向字符串中。有人可以指出我的错误。提前谢谢。

#include <iostream>
using namespace std;


class Rev_string{

     char source[100], dest[100];
     int pos_source, pos_dest;

     public:
         void func(){

             pos_source=pos_dest=0;
             cout<<"Enter the string to be reversed: ";
             cin.getline(source,sizeof(source));
             //cin>>source;
             cout<<endl;


             while(source[pos_source]!='\0')
             pos_source++;


             --pos_source;

             while(pos_source!=0)
             dest[pos_dest++]=source[pos_source--];


             dest[pos_dest]='\0';


             cout<<"The reversed string is: "<<dest<<endl;
        }


  };

  int main(int argc, char** argv) {

   Rev_string ob;
   ob.func();
   return 0;
} 

1 个答案:

答案 0 :(得分:0)

pos_source是以0开头的数组中最后一个字符的索引。要遍历数组中的所有字符,您还需要跟踪0-index字符,现在将被跳过:处理后索引为1的元素,source[pos_source--]; pos_source将为0,我们将从while循环中退出。这就是你失去第一个字符(0指数)的原因。

您可以像while(pos_source >= 0)一样修复它。

这是一个典型的"off-by-one"错误。