void pairStar(char input[]) {
int len = strlen(input);
if(input[0] == '\0'){
return ;
}
if(input[0] == input[1]){
for(int i = len; i >= 2; i--){
input[i] = input[i-1];
}
input[2] = input[1];
input[1] = '*';
}
pairStar(input+1);
}
这个代码中的错误是什么。 我找不到。 如果我输入aaaa
,abaa
等,它运行完美。 但是当我输入scatter时,就会显示scatter*ter?@那么完美的解决方案是什么。
您不能复制终止字符\0
! 因此,当您插入一个字符时,字符串的终止是未定义的。
还要注意,aaaa
的正确答案应该是a*a*a*a
(或a*aa*a
,具体取决于问题定义)。
Split参数来定义soruce和destination,并使用单独的缓冲区。
void copyAddStarToPairs(const char *src, char *dst)
{
*dst = *src;
if (!*dst) return;
dst++;
char prev = *src++;
if (prev = *src) *dst++ = '*';
copyAddStarToPairs(src, dst);
}
您可能应该使用std::string
,因为您的char缓冲区可能不够长。
#include <string>
using std::string;
void pairStar(string & s, int st) {
if (st >= (int)s.size() - 1)
return;
else if (s[st] == s[st + 1]) {
s += ' ';
for (int i = (int)s.size() - 1; i > st + 1; i--)
s[i] = s[i - 1];
s[st + 1] = '*';
st++;
}
pairStar(s, st + 1);
}
int main() {
string s = "aadqwedabbbbb*dqwdasd";
pairStar(s, 0);
cout << s << endl;
}