对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);
}
网友评论