我想要反转一个字符串。当我使用简单的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;
}
答案 0 :(得分:0)
pos_source
是以0开头的数组中最后一个字符的索引。要遍历数组中的所有字符,您还需要跟踪0-index字符,现在将被跳过:处理后索引为1的元素,source[pos_source--];
pos_source将为0,我们将从while循环中退出。这就是你失去第一个字符(0指数)的原因。
您可以像while(pos_source >= 0)
一样修复它。
这是一个典型的"off-by-one"错误。