扭转一个词:C ++

时间:2015-04-25 15:55:43

标签: c++ char reverse

我想在c ++中反转一个char字符串。 我写了这段代码:

#include <iostream>
#include <string.h>

using namespace std;

int main(){
    char word[80] = "polymorphism";
    char rev[80];
    int i, j;
    int l;
    l = strlen(word);
    for(i = 0, j = l; i < l-1; i++, j--){
        word[j] = rev[i];
    }
    cout << rev << endl;
    return 0;
}

在终端中,它会显示如下字符:

83???uH??? ... Something like this

3 个答案:

答案 0 :(得分:2)

你的角色阵列转速不是零终止。

并且要写给你写的文字。:)

    word[j] = rev[i];

由于条件

,循环也是错误的
i < l-1;

必须有

i < l;

程序可以按以下方式查看

#include <iostream>
#include <cstring>

int main()
{
    char word[80] = "polymorphism";
    char rev[80];

    size_t n = std::strlen( word );

    size_t i = 0;
    for ( ; i < n; i++ ) rev[i] = word[n - i - 1];
    rev[i] = '\0';

    std::cout << word << std::endl;
    std::cout << rev << std::endl;

    return 0;
}

程序输出

polymorphism
msihpromylop

考虑到您可以使用标头std::reverse_copy中声明的标准算法<algorithm>执行相同的操作。 例如

#include <iostream>
#include <cstring>
#include <algorithm>

int main()
{
    char word[80] = "polymorphism";
    char rev[80];

    size_t n = std::strlen( word );

    *std::reverse_copy( word, word + n, rev ) = '\0';

    std::cout << word << std::endl;
    std::cout << rev << std::endl;

    return 0;
}

程序输出与上面相同

polymorphism
msihpromylop

答案 1 :(得分:0)

#include <iostream>
#include <string.h>

using namespace std;

int main(){
    char word[80] = "polymorphism";
    char rev[80] = {'\0'};
    int i = 0;
    int last = strlen(word) - 1;
    while(last >= 0) {
        rev[i] = word[last];
        i++;
        last--;
    }
    cout << rev << endl;
    return 0;
}

答案 2 :(得分:0)

我对您的代码进行了3次更改:
更改1:由于字符串长度为l,因此索引将来自0 t o l-1。 更改2:rev将存储来自word的值,而不是相反。{ 更改3:正确的字符串应\0终止。

#include <iostream>
#include <string.h>

using namespace std;

int main(){
char word[80] = "polymorphism";
char rev[80]="";
int i, j;
int l;
l = strlen(word);
for(i = 0, j = l-1; i < l; i++, j--){    //change 1
    rev[i] = word[j];                     // change 2   
}
rev[i]='\0';          // change 3 

cout<<rev;
return 0;
}

工作ideone链接:http://ideone.com/kIqeNF