151 Reverse Words in a String

關鍵是處理前后和中間的空格,關鍵代碼:
last = 0;
for(int i = 0; i < len; i++)
if(s[i] != ' ' || (last && s[last-1] != s[i]))
s[last++] = s[i];
'#'定義為' '

XXX###XX#### ==> XXX#XX#

if(s[i] == ' ' && last && s[last-1] != s[i]) 這個邏輯保證X后面的#可以保存下來,避免中間的#都被刪除掉

void reverse(char *s, int l, int r)
{
    while(l < r){
        char tmp = s[l];
        s[l] = s[r];
        s[r] = tmp;
        l++;
        r--;
    }

}

void reverseWords(char *s) {
    if(s == NULL)
        return;
    int len = strlen(s);
    if(len == 0 )
        return;
//remove white space
    int last = 0;
    for(int i = 0; i < len; i++)
        if(s[i] != ' ' || (last && s[last-1] != s[i]))
            s[last++] = s[i];

    if(last == 0) // 說明全是空格
    {
        s[last] = '\0';
        return;
    }
    if(s[last-1] == ' '){ //原字符串尾部有空格 ,處理完后最后一個字符后面的空格還會保存,需要替換為'\0'
        s[last-1] = '\0';
        len = last-1;
    }else{//原字符串尾部沒有空格,之前把當前l(fā)ast 指向設置為字符串結(jié)尾標志'\0'
        s[last] = '\0';
        len =last;
    }
    int l = 0;
    int r = 0;
    for(int i = 0; i <= len; i++){
        if(s[i] == ' ' || s[i] == '\0'){
            r = i-1;
            reverse(s, l , r);
            l = i+1;
        }
    }
 
    reverse(s, 0, strlen(s)-1);


}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容