剣指offer(2)——C++置換スペースを実現

8653 ワード

問題の説明
文字列の各スペースを%20置換
知識点を考察する.
  • 文字列プログラミング能力
  • メモリオーバーライド
  • 問題を解く構想.
    元の文字列操作では、メモリオーバーライドの問題、すなわち、1\0%203文字で置き換えられることを考慮します.後ろから前へ、スペースに遭遇した場合、新しい文字列に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;
    }
    

    コード作成で発生した問題
  • 文字列の作成問題char*strに直接値を割り当て始めたばかりで、replacespaceメソッドを呼び出すと、実パラメータとパラメータが一致しません.理由の検索:const char*タイプの値は、初期化char *タイプのエンティティに使用できません.次に、以下のように変更します.
  • char p[20] = "we are happy." ;
    char *str = p;