题目要求反转句子中每个单词的顺序,单词简单的以空格分隔
input
How are you?
output
you? are How
想到的测试用例
1. 首位有空格,目前结果中,首位也会有空格
2. 连续空格的情况,目前结果也会有连续空格
3. 单词只有一个字母
4. 输入为空串
解题思路
两次反转,第一次反转整句话,第二次反转每个单词
代码
void reverse_word(char a[]) {
if (a == NULL) return; // 这个必须写,否则strlen遇到空指针会crash
int n = strlen(a);
if (n == 0) return; //这个可以不写,因为为0时,后面的循环都不会进入,但是写上更安全清晰,不容易出错
for (int i = 0, j = n-1; i<j; i++, j--) {
char temp=a[i]; a[i]=a[j]; a[j]=temp;
}
int start = 0, end = 0;
while (end < n) { // 这里必须使用位置判断,而非检查a[end],因为内循环定位后
// 出大循环前,end又加了1,移动到字符串后面去了
// 这里,不知道有没有更方便记忆的,直白的写法
while (a[end] && a[end] != ' ') end++; // 一定要双重判断,否则会越界。可以使用end<n代替,感觉更直观
for (int i=start, j=end-1; i<j; i++, j--) {
char temp=a[i]; a[i]=a[j]; a[j]=temp;
}
start = ++end;
}
}