時間複雜度為o(n^2)的解法
思路:從頭到尾掃瞄字串,每一次碰到空格字元的時候做替換,即把1個字元替換成3個字元;我們必須要把空格後面所有的字元向後移動兩個位元組,否則就有兩個字元被覆蓋了。
基於如上思路,**實現如下:
void solution::replacespace1(char *str, int len)
int index = 0;
while(str[index] != '\0')
str[index]='%';
str[index+1]='2';
str[index+2]='0';
} index++;
} return ;
}
時間複雜度為o(n)的解法:
思路:先遍歷一遍,統計空格總數與替換前字串總長度,並由此計算出替換後字串的總長度。新長度 = 舊長度+2*空格數。然後我們從字串的後面開始複製和替換,準備兩個指標p1和p2。分別指向替換前字串的末尾和替換後字串的末尾;接下來我們向前移動p1,逐個把它指向的字元複製到p2指向的位置,直到碰到空格,進行替換。p1和p2重合為止。**實現如下:
void solution::replacespace2(char *str, int len)
strlenthnew = strlenthold + spacenum*2;
if(strlenthnew > len)
return;
while(strlenthold>0 && strlenthnew>strlenthold)
else
}return ;
}
完整**實現如下:#include "string.h"
class solution
;solution::solution()
{}solution::~solution()
void solution::replacespace1(char *str, int len)
int index = 0;
while(str[index] != '\0')
str[index]='%';
str[index+1]='2';
str[index+2]='0';
} index++;
} return ;
}void solution::replacespace2(char *str, int len)
strlenthnew = strlenthold + spacenum*2;
if(strlenthnew > len)
return;
while(strlenthold>0 && strlenthnew>strlenthold)
else
}return ;
}int main()
; char str2[100] = ;
solution otest;
otest.replacespace1(str1, 100);
otest.replacespace2(str2, 100);
return 0;
}
字串空格替換 C實現
題目 輸入乙個字串和待替換的字串,將字串中的空格替換成待替換的字串。程式分析 1 查詢空格時,從前往後查詢。2 替換空格時,先計算需要多少空間,然後從後往前移動,則每個字元只為移動一次,這樣效率更高一點。c define crt secure no warnings include void rep...
去除字串中的空格 C
思路 不開闢新空間,直接在字串上直接進行操作,把空格用後面的字串填充。解法 除陣列名本身這個指標外,只需建立乙個指標來指向空格後面的字元,將字元賦給空格後,原字元所在位置置為空格,兩個指標同時向後移動一步,繼續迴圈直到 指向字元的指標移動到陣列末尾 即指標指向的值為 0 為止。實現 include ...
用c 實現類似vb的replace字串替換
用過vb的朋友都知道,vb裡的replace很好用,貌似c 裡沒有乙個現成的函式實現這個功能 mfc裡的cstring除外 那麼我們來自己寫 實現功能吧.c 實現如下 include include using namespace std string replace string a,string...