反转C风格的字符串

Mar*_*msy -2 c++

编写代码来反转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)

Bau*_*gen 5

'\0'将字符串末尾的终结符字符交换到最开头.因此cout,在找到第一个\0字符之前打印,不打印任何内容.使用j = length - 1将它排除在外.

但更好的是:这已在标准库中实现:

void ReverseString(char *p) {
   std::reverse(p, p + std::strlen(p));
}
Run Code Online (Sandbox Code Playgroud)

将算法用于手工制作的代码通常是一个非常好的主意,因为它更不容易出错并且通常更有效.