1、题目描述
输入一个字符串,翻转单词的次序。比如输入:"i am a student",输出:"student a am i"
2、解题思路
首先整个字符串进行逆序。逆序之后,接着对每个单词进行逆序,时间复杂度为O(n)。代码如下:
#include<iostream>
using namespace std;
void Reverse(char* begin, char* end) {
while (begin < end) {
char temp = *begin;
*begin = *end;
*end = temp;
begin++;
end--;
}
}
//翻转字符串,比如输入:"i am a student",输出:student a am i
int main() {
char input[1000];
cin.get(input, 1000);
int len = strlen(input);
Reverse(input, input+len-1);
char* begin = input;
char* end = input;
for (int i = 0; i < len; i++) {
if (*end != 32) {
end++;
}
else {
Reverse(begin, --end);
end++;
while (*end == 32)end++;
begin = end;
}
}
cout << input << endl;
return 0;
}
3、关于char *p ="hello“和char p[] = "hello"的区别
(1)char *p = "hello"中,“hello”是一个字符串常量,存在静态代码段中,因此不能修改这个字符串常量的值。sizeof(p)=4。
(2)char p[] = "hello"中,“hello”是一个字符串局部变量,位于栈中,是可以被修改的,并且这个字符串以'/0'结尾。siziof(a)=6,strlen(a)=5。