《剣指offer》面接問題5:スペースの置き換え(C++実現)
1125 ワード
タイトル
文字列の各スペースを「%20」に置き換える関数を実装してください.例えば「We are happy.」と入力し、「We%20 are%20 happy.」と出力します.
コード#コード#
まとめ
スペースの数を計算して置換後の文字列の長さを求め、2つの補助ポインタはそれぞれ置換前後の文字列の末尾を指し、後から前へコピーします.時間複雑度O(n).
文字列の各スペースを「%20」に置き換える関数を実装してください.例えば「We are happy.」と入力し、「We%20 are%20 happy.」と出力します.
コード#コード#
#pragma once
/**
* ,
* , 。
* 。
*/
//
void replaceBlank(char m_string[], int capacity)
{
if (m_string == nullptr || capacity <= 0)
return;
//
int lengthOfString = 0;
int numberOfBlank = 0;
int i = 0;
while (m_string[i] != '\0')
{
++lengthOfString;
if (m_string[i] == ' ')
++numberOfBlank;
++i;
}
//
int newLength = lengthOfString + numberOfBlank * 2;
if (newLength > capacity)
return;
//
int oldIndex = lengthOfString;
int newIndex = newLength;
while (oldIndex >= 0 && newIndex > oldIndex)
{
if (m_string[oldIndex] == ' ')
{
m_string[newIndex--] = '0';
m_string[newIndex--] = '2';
m_string[newIndex--] = '%';
}
else
m_string[newIndex--] = m_string[oldIndex];
--oldIndex;
}
}
まとめ
スペースの数を計算して置換後の文字列の長さを求め、2つの補助ポインタはそれぞれ置換前後の文字列の末尾を指し、後から前へコピーします.時間複雑度O(n).