【其他】字串的解析!!!
阿新 • • 發佈:2019-01-06
在操作字串的時候經常會碰到,一類是如何將字串的部分替換,另一類就是如何將字串進行重新組合。
一、如何將‘[email protected]@@@[email protected]@@@@[email protected]@@@@@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';
}
二、如何將‘[email protected]@@@[email protected]@@@@[email protected]@@@@@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;
}