对cpp还是不熟啊,尤其是char, char*, char[]这块。
char* s1 = "abcde";
char s2[] = "abcde";
上边s1 是不能被修改的,s2可被修改。
#include <iostream>
#include <cstring>
#include <assert.h>
using namespace std;
// 翻转单词顺序
void reverseWord(char s[], int l, int r);
void reverseSentence(char sen[]);
int main() {
    char sen[] = "She is a student.";
    reverseSentence(sen);
    string s(sen);
    cout<< s<< endl;
    return 0;
}
// 翻转单词顺序
void reverseWord(char s[], int l, int r){
    assert(s == NULL || l <= r);
    while (l < r) {
        char temp = s[l];
        s[l] = s[r];
        s[r] = temp;
        l++; r--;
    }
}
void reverseSentence(char sen[]){
    if (sen == NULL) return;
    int len = strlen(sen);
    // 翻转整个句子
    reverseWord(sen, 0, len-1);
    // 翻转每个单词
    int l = 0;
    for (int r = 0; r < len; ++r) {
        if (sen[r] == ' '){
            reverseWord(sen, l, r - 1);
            l = r + 1;
        }
    }
    reverseWord(sen, l, len-1);
}