题目:输入一个字符串和待替换的字符串,将字符串中的空格替换成待替换的字符串。
程序分析:
(1)查找空格时,从前往后查找。
(2)替换空格时,先计算需要多少空间,然后从后往前移动,则每个字符只为移动一次,这样效率更高一点。
C代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void ReplaceSpace(char *str, int length, char *ch, int chlength) {
if (str == NULL) {
return;
}
//查找空格数目
int numSpace = 0;
int oldLength = 0;
for (int i = 0; i<length; i++) {
oldLength++;
if (str[i] == ' ') {
numSpace++;
}
}
//空格替换
int newLength = oldLength + (chlength - 1) * numSpace;
while (oldLength >= 0 && newLength>oldLength) {
if (str[oldLength] == ' ') {
int clength = chlength;
for (int j = 0; j<chlength; j++)
str[newLength--] = ch[--clength];
}
else {
str[newLength--] = str[oldLength];
}
oldLength--;
}
}
int main() {
char str[100];
printf("Please input str:");
scanf("%[^\n]]", str);
int length = strlen(str) + 1;
char ch[5];
printf("Please input replace ch(not include space):");
scanf("%s", ch);
int chlength = strlen(ch);
printf("Old str:%s\n", str);
printf("Replace ch:%s\n", ch);
ReplaceSpace(str, length, ch, chlength);
printf("New str:%s\n", str);
return 0;
}
C运行结果:
编程小提示:
1、代码第37行,切不可写成如下形式:
scanf("%s",str);
否则,字符串中不能输入空格。
另附:在C/C++中输入包含空格的字符串的方法https://blog.csdn.net/qq_34600424/article/details/79432947。
2、代码第25行,切不可写成如下形式:
str[newLength--] = ch[clength--];
否则,其运行结果为:
错误原因:
当输入的字符串为***时,ch此时包含结束符‘\0’,因此求出的clength为4;
若代码中写成ch[clength–],这时先赋值、后- -;
相当于把ch[4]=‘\0’赋值给str;
最终输出str时,以’\0’为结尾进行输出,得不到想要的答案。