如何通过strrev()函数反转char数组

时间:2016-01-20 12:02:59

标签: c++

我正在使用strrev()函数来反转char数组并获得输出。  但它显示出奇怪的结果。如果我进入"女士"它的反转结果是这样的。

this is image of error

请向我解释一下错误。

#include<iostream>
#include<string.h>
using namespace std;

main(){

    int x,i;
    cout<<"Enter the size of array:";
    cin>>x;
    cout<<"Enter "<< x <<" elements in array:";
    char ch1[x] ;
    for(i=0; i<x; i++){
        cin>>ch1[i];
    }
    char ch2[x] = {0};

    for(i=0; i<x; i++){
    ch2[i] = ch1[i];
    }

    cout<<"Copied array is:";
    for(i=0; i<x; i++){
        cout<<ch2[i];
    }

    cout<<endl;
    strrev(ch2);
    cout<<ch2;

    if(ch1[x] == ch2[x]){
        cout<<"\nPalindrom";
    }else{
        cout<<"\nNot palindrom";
    }


}

2 个答案:

答案 0 :(得分:1)

你需要null终止你的c风格字符串,如:

char ch1[x + 1];  // need space for null
for(i=0; i<x; i++){
    cin>>ch1[i];
}
ch1[x] = '\0';  // null terminate

char ch2[x + 1] = {0};  // need space for null here too

for(i=0; i<x; i++){
ch2[i] = ch1[i];
}
ch2[x] = '\0';  // null terminate

答案 1 :(得分:0)

函数strrev需要一个字符串,但你有一个char矢量。您必须在向量的末尾插入 null-terminator'\ 0'才能使用该函数!