剣指offer(2)——C++置換スペースを実現
8653 ワード
問題の説明
文字列の各スペースを
知識点を考察する.文字列プログラミング能力 メモリオーバーライド 問題を解く構想.
元の文字列操作では、メモリオーバーライドの問題、すなわち、1
完全なC++コード
コード作成で発生した問題文字列の作成問題char*strに直接値を割り当て始めたばかりで、replacespaceメソッドを呼び出すと、実パラメータとパラメータが一致しません.理由の検索:
文字列の各スペースを
%20
置換知識点を考察する.
元の文字列操作では、メモリオーバーライドの問題、すなわち、1
\0
被%
、2
、0
3文字で置き換えられることを考慮します.後ろから前へ、スペースに遭遇した場合、新しい文字列に2文字の長さを増やした後%20
スペースを置換すればいいです.完全なC++コード
/*02_replacespace*/
#include
#include
using namespace std;
class Solution {
public:
void replaceSpace(char *str, int length)
{
if (str == NULL || length <= 0)return;//
int numberofblank = 0;
for (int i = 0; i < length; i++)// str,
{
if (str[i] == ' ')
numberofblank++;
}
int newlength = length + 2 * numberofblank;
int numberoforigin = length;
int numbernewstr = newlength;
while (numberoforigin >= 0 && numbernewstr >= numberoforigin)// , 20%
{
if (str[numberoforigin] != ' ')
{
str[numbernewstr--] = str[numberoforigin];
}
else
{
str[numbernewstr--] = '0';
str[numbernewstr--] = '2';
str[numbernewstr--] = '%';
}
--numberoforigin;
}
}
};
int main()
{
Solution s;
char p[20] = "we are happy." ;
char *str = p;
s.replaceSpace(str, 14);
int length = strlen(str);
for (int i=0; i < length; i++)
{
cout << str[i] ;
}
cout << endl;
return 0;
}
コード作成で発生した問題
const char*
タイプの値は、初期化char *
タイプのエンティティに使用できません.次に、以下のように変更します.char p[20] = "we are happy." ;
char *str = p;