題目描述:
請實作一個函式,把字串 s 中的每個空格替換成"%20",
輸入:s = “We are happy.”
輸出:“We%20are%20happy.”
前言
力扣上評論區的許多大佬都已經給出了c++和java實作的方法,但我卻沒有找到用純c語言實作的方法,所以我寫了這篇博客用來解釋這道題的純c解法,解法可能不如上面兩種語言的好,僅供參考~
思路:
這道題,首先要確保一個字串的大小要足夠裝的下替換后的字符
經過觀察發現:每有一個空格,字串長度就增加2
解釋:一個空格用來放’%’,剩下需要開辟兩個額外空間來放置’2’和’0’
然后我們就可以先開辟一個新的字符陣列存放我們的新字串
新的字串長度=原字串長度+(空格個數*2)+1(這里的+1是為了存下字串末尾的’\0’)
而計算空格的個數,需要遍歷一下字串
//準備作業
int space_num = 0;
int len = strlen(s);
for (int i = 0; i < len; i++)
{
if (s[i] == ' ')
{
space_num++;//計算空格個數
}
}
char* tmp = (char*)malloc(sizeof(char) * (len + space_num * 2 + 1));//開辟字串
接下來就是替換了,我們采取從后往前替換的方式
一般用這種順序操作可以防止資料的過多挪動
替換我們替換到(i+space_num*2)的位置上,因為需要留出足夠的空間
等到遇到空格后,就換上"%20",然后space_num–;
畫圖解釋

代碼
char* replaceSpace(char* s) {
int space_num = 0;
int len = strlen(s);
for (int i = 0; i < len; i++)
{
if (s[i] == ' ')
{
space_num++;
}
}
char* tmp = (char*)malloc(sizeof(char) * (len + space_num * 2 + 1));
for (int i = len; i >= 0; i--)
{
if (s[i] == ' ')
{
space_num--;
tmp[i + space_num * 2] = '%';
tmp[i + space_num * 2 + 1] = '2';
tmp[i + space_num * 2 + 2] = '0';
}
else
{
tmp[i + space_num * 2] = s[i];
}
}
return tmp;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/330146.html
標籤:其他
