反转每个单词,首先第一步就是要提取出每个单词;然后调换单词
代码:
char * reverseWords(char * s){
int start = -1;
int end = -1;
int tag = 0;
int len = strlen(s);
for (int i = 0; i < len; i++) {
if (s[i] != ' ' && tag == 0) {
start = i;
tag = 1;
}
if (s[i] == ' ' && tag == 1) {
end = i - 1;
for (int j = 0; j < ((end - start) / 2 + 1); j++) {
char tmp = s[start + j];
s[start + j] = s[end - j];
s[end - j] = tmp;
}
tag = 0;
}
}
// 最后一个单词
end = len - 1;
for (int j = 0; j < ((end - start) / 2 + 1); j++) {
char tmp = s[start + j];
s[start + j] = s[end - j];
s[end - j] = tmp;
}
return s;
}
设置一个tag,标记当前位置,tag为0就是单词外,读取到一个单词就将这个值保存为start,并将tag修改为1;tag为1就是单词内,当遇到空格时,就是离开了单词,将其减一保存为end,又将tag的值改为0。
其中,最后一个单词后面并没有空格,所以最后一个单词要单独处理。
提交后发现,这个居然之前写过,并且提交之后执行用时缩短了,内存消耗也少了一丢丢,这可能就是刷出来的结果吧,哈哈哈!!
结果