1

我写了一个代码来反转一个字符串

#include < iostream >
#include < cstring >

using namespace std;

string Reversal(char * s);

int main()
{
    char str[25];

    cout << "Enter a Name :";

    cin.get(str, 25);
    cout << "You have entered: " << str;

    cout << "\nReversed : " << Reversal(str);
    return 0;
}

string Reversal(char * s)
{
    int count = strlen(s);
    char temp[count];
    for (int i = 0; i < count; i++)
    {
        temp[i] = * (s + (count - 1) - i);
    }
    return temp;
}

已参考以下链接以使 cin 将空格作为输入:

如何在 C++ 中输入空间?

但是输出显示了一些垃圾字符?有什么建议吗? 在此处输入图像描述

4

2 回答 2

4

当您隐式构造 a std::stringfromtemp时,后者应为 NUL 终止,但事实并非如此。

改变

return temp;

return std::string(temp, count);

这使用了不同的构造函数,它采用显式字符计数并且不期望temp以 NUL 结尾。

于 2013-04-01T08:29:55.483 回答
2

临时数组中的最后一个字符应该以空字符结尾。使其比输入字符串的大小长 1。将最后一个字符设为空字符 ( '\0')。

string Reversal(char *s)
{
 int count=strlen(s);
 char temp[count+1]; //make your array 1 more than the length of the input string
 for (int i=0;i<count;i++)
 {
   temp[i]= *(s+(count-1)-i);
 }

 temp[count] = '\0'; //null-terminate your array so that the program knows when your string ends
 return temp;
}

空字符指定字符串的结尾。通常它是一个全为 0 位的字节。如果您没有将其指定为临时数组的最后一个字符,程序将不知道您的字符数组何时结束。它将继续包含每个字符,直到找到一个'\0'.

于 2013-04-01T08:31:56.747 回答