# 经典算法面试题目-翻转一个C风格的字符串（1.2）

2022-05-14 14:05:3851CTO

Write code to reverse a C-Style String. (C-String means that “abcd” is represented as five characters, including the null character.)

```

void swap(char &a, char &b){

a = a^b;

b = a^b;

a = a^b;

}

void reverse1(char *s){

if(!s) return;

char *p = s, *q = s;

while(*q) ++q;

--q;

while(p < q)

swap(*p++, *q--);

}

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

```

```

void swap(char &a, char &b)

{

a = a^b;

b = a^b;

a = a^b;

}

void reverse2(char *s)

{

int n = strlen(s);

for(int i=0; i < n/2; ++i)

swap(s[i], s[n-i-1]);

}

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

```

```

#include <iostream>

#include <cstring>

using namespace std;

void swap(char &a, char &b){

a = a^b;

b = a^b;

a = a^b;

}

void reverse2(char *s){

int n = strlen(s);

for(int i=0; i<n/2; ++i)

swap(s[i], s[n-i-1]);

}

void reverse1(char *s){

if(!s) return;

char *p = s, *q = s;

while(*q) ++q;

--q;

while(p < q)

swap(*p++, *q--);

}

int main(){

char s[] = "1234567890";

reverse1(s);

cout<<s<<endl;

return 0;

}

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

27.

28.

29.

30.

31.

```

```

#include <iostream>

#include <cstring>

#include <cstdio>

using namespace std;

void swap(char &a, char &b){

a = a^b;

b = a^b;

a = a^b;

}

void reverse2(char *s){

int n = strlen(s);

for(int i=0; i<n/2; ++i)

swap(s[i], s[n-i-1]);

}

void reverse1(char *s){

if(!s) return;

printf("%d\n",s);//s是一个地址

char *p = s, *q = s;

printf("%d\n",p);

printf("%d\n",*p);//*p代表当前地址的一个字符

while(*q){//遇到结束符的时候*p的值是0

++q;

printf("p=%d*\n",q);

printf("*p=%d*\n",*q);

//最后一个是字符串的结束符

}

--q;

printf("*%d*\n",q);//此时的q为结束符之前的一个字符

//此时q指向结束，p是指向开头

while(p < q)//一直交换，直到中间位置

swap(*p++, *q--);

}

int main(){

char s[] = "abcdefghi";

reverse1(s);

cout<<s<<endl;

return 0;

}

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

27.

28.

29.

30.

31.

32.

33.

34.

35.

36.

37.

38.

39.

40.

41.

42.

```

c风格的字符串是用数组存放的，一般要以’\0’结束

char str[4]=”123”;就是c风格

string是c++中的关键字,和int，float等等一样， 在c++中，string 定义的变量可以直接存储字符串。在C语言中是没有这种直接存储字符串的变量的。

[ ]里面是4，是因为，C风格的字符串，在最后都会默认添加’\0’，所以”123”本质上是1 2 3 ‘\0’

https://blog.51cto.com/u_14290964/5293024