【其他】字串的解析!!!

doctor_xiong發表於2018-02-08

在操作字串的時候經常會碰到,一類是如何將字串的部分替換,另一類就是如何將字串進行重新組合。

一、如何將‘aaa@@@@bbbbbb@@@@@cccccccc@@@@@@dddddddddddd’,替換成‘aaa bbbbbb ccccccc dddddddddddd’
要求:時間複雜度O(1),空間複雜度O(1)

方法:
定義兩個指標開始時候都指向字元開頭,當另外一個走到需要去掉的字元時候將第一個字元替換成空格,如果之後還是需要替換的字元就將一個指標向後走,知道為不是需要替換的字元為止,然後在將指向需要替換的字元指向的位置替換成另外一個指標指向的字元就可以了。
這裡寫圖片描述

程式碼:


void change(char* buf){
    int i = 0;
    int status = 0;
    char* cur = buf;
    char* next =buf;
    if(NULL == buf)
        return ;
    while(*next != '\0'){
        if(*next == '@'){
            if(status == 0){
                *(cur++) = ' ';
                status = 1;
            }
            next++;
        }
        else{
            status = 0;
            *(cur++) = *(next++);
        }
    }
    *cur = '\0';
}

二、如何將‘aaa@@@@bbbbbb@@@@@cccccccc@@@@@@dddddddddddd’,解析成‘aaa’,‘bbbbbb’,‘cccccccc’,‘ddddddddddddd’。
方法:定義有一個指標陣列,將原陣列的每一部分解析成指標陣列的每一個元素。
這裡寫圖片描述

程式碼:


#include<stdio.h>

void change(char* buf){
    char* argv[5];
    int argc = 0;
    int status = 0;
    int i = 0;
    if(NULL == buf)
        return;
    while(buf[i] != '\0'){
        if(status == 0 && buf[i] != '@'){
            argv[argc++] = buf + i;
            status = 1;
        }
        else if(buf[i] == '@'){
            buf[i] = 0;
            status = 0;
        }
        i++;
    }
    argv[argc] = NULL;
}

相關文章