编写代码来反转C风格的字符串.(C风格的字符串表示"abcd"表示为五个字符,包括空字符.)没有打印出来.为什么?
void ReverseString(char *p){
int length = strlen(p);
for (int i = 0, j = length; i < j; i++, j--){
swap(p[i], p[j]);
}
}
int main()
{
char a[] = "12345";
ReverseString(a);
cout << a;
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您'\0'将字符串末尾的终结符字符交换到最开头.因此cout,在找到第一个\0字符之前打印,不打印任何内容.使用j = length - 1将它排除在外.
但更好的是:这已在标准库中实现:
void ReverseString(char *p) {
std::reverse(p, p + std::strlen(p));
}
Run Code Online (Sandbox Code Playgroud)
将算法用于手工制作的代码通常是一个非常好的主意,因为它更不容易出错并且通常更有效.