试图在C ++中反转字符串,但在反向字符串中出现乱码?

时间:2014-09-28 04:41:19

标签: c++ string

这是我的反转字符串的功能:

void reverse(char *str){

    int lengthStr = strlen(str);
    int j, i;
    char reversedString[100];

    for (j = 0, i = lengthStr-1; i >= 0; i--, j++){
        reversedString[j] = str[i];
    }

    cout << reversedString;
}

字符串确实显示为反转,但最后会出现一堆奇怪的字符。可能导致这个问题的原因是什么?

3 个答案:

答案 0 :(得分:2)

如果您想要反转字符串,可以使用许多更清晰的方法,如:std::reverse_copy等。 但是如果你想修复这个功能,那就试试这个:

char reversedString[100];
memset(reversedString, 0, 100*sizeof(char);

for (j = 0, i = lengthStr-1; i >= 0; i--, j++){
    reversedString[j] = str[i];
}

reversedString[j] = '\0'; //! Add null character at the end to indicate end of the string
cout << reversedString;

注意:如果输入字符串包含length >= 100,您的程序将失败。

答案 1 :(得分:1)

为您分配给reversedString的字符添加零。否则,新字符串的未初始化的额外部分将显示为垃圾。零用于标记字符串的结尾。

答案 2 :(得分:1)

首先,该功能无效,没有任何意义。您不反转原始字符串,并且函数中定义的本地字符串可能小于原始字符串。此外,您不会使用终止零附加反转的本地字符串。该功能可以看起来像

void reverse( char *str )
{
    size_t n = std::strlen( str );

    for ( size_t i = 0; i < n / 2; i++ )
    {
        char c = str[i];
        str[i] = str[n - i - 1];
        str[n - i - 1] = c;
    }
}

原始的反向字符串可以显示在调用该函数的代码中。