我编写了一个代码来反转字符串
#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以空格为输入:
但是输出显示了几个垃圾字符?有什么建议为何如此?
答案 0 :(得分:4)
当您从std::string
隐式构造temp
时,后者应该是NUL终止的,但事实并非如此。
更改
return temp;
到
return std::string(temp, count);
这使用了一个不同的构造函数,一个采用显式字符计数的构造函数,并且不希望temp
被NUL终止。
答案 1 :(得分:2)
临时数组中的最后一个字符应该以null结尾。使它比输入字符串的大小长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'
。