1、自己原始的答案:
void replacespace(char *str,int length)
else
vec_char.push_back(str[i]);
}//char* cres = new char[vec_char.size()];
int i=0;
for(auto iter = vec_char.cbegin();iter!=vec_char.cend();iter++)
str[i] = '\0';
//str = cres;
}//
問題: 從前向後複製,時間複雜度是o(n*n),時間複雜度過大,同時還應用了vector這個容器的,因此程式的執行時間也比較長。
2、之後的答案
void replacespace(char *str,int
length)
// 需要注意的是:這裡加的是2,不是3,很容易出錯
str[num1*2+length]='\0';
char* p1 = str + num1*2+length-1;
p = str + length - 1;
// 當p和p1所指向的位址相同的時候,一定是所有的空格全部插完了。
while(p1!=p)
p1--;
p--;
}}
時間複雜度是o(n)。
1、主要的思路是:先計算好空格的數目,根據這個計算插入後需要的整個字串的長度,從後向前進行插入和複製。這樣就可以達到o(n)的複雜度。
2、插入的時候,先計算好需要的長度。一定要從後向前插入。
1、之前的空格也是佔乙個位元組的,因此如果有n個空格,那麼最後在之前的字串長度上需要增長的長度為 2*n,注意這裡不是 3*n,這裡很很容易犯錯。不然兩個指標一直沒法相等,一直插不完,就會出錯。
2、兩個指標分別指向原始字串的結尾的位址和計算好新字串的結尾的字元的位址,當還有m空格的時候,兩個指標的之間距離是2*m的距離,只有當所有的空格全部被插完之後,兩個指標的值才會相同,這是插入就結束了。
—————————-分割線1————————
自己寫了的乙個測試函式
1、低階錯誤
int main()
2、正確
int main()
將字串常量的每個位元組的字元分別複製給str所指向的記憶體即可。
—————————-分割線2————————
舉一反三
1 題目:合併兩個都已經排好序的陣列a1和a2,假設a1後面有足夠的記憶體存放a2的資料。
2基本思路:從後向前比較和插入
3******
#include
using namespace std;
void sorttwoarray(int* a, int* b, int sizea, int sizeb)
else
p--;
}}int main()
sorttwoarray(a, b, 10, 10);
for(int i=0;i<20;i++)
cout << a[i] << endl;
system("pause");
return
1;}
字串替換空格題目
剛看到題目時我的想法就是新建乙個字元陣列,然後遍歷舊的字串時判斷一下,如果不為空格字元就直接複製給新字元陣列,否則就講 20複製給新字元陣列,但是假如僅僅讓在原來的字串上做替換的話,又該如何做呢。測試通過 如下 class solution i newlength oldlength count 2...
jquery 替換空格
如果是用php替換所有的空格,可以直接這樣寫 srt str replace str 替換所有的空格.但自己有js這樣 str str.replace 寫替換空格的時候,打乙個空格可以替換,如果打兩個空格以上,就不可以了。js去除空格的方法目前共有12種 實現1 string.prototype.t...
O n 實現替換空格
題目 請實現乙個函式,把字串中的每個空格替換成 20 要求時間複雜度為o n 思路 我們從字串的後面開始複製和替換。首先準備兩個指標,p1和p2。p1指向原始字串的末尾,而p2指向替換之後的字串的末尾 如圖 a 所示 接下來我們向前移動指標p1,逐個把它指向的字元複製到p2指向的位置,直到碰到第乙個...