字符串空格替换——C实现

题目:输入一个字符串和待替换的字符串,将字符串中的空格替换成待替换的字符串。

程序分析:
(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’为结尾进行输出,得不到想要的答案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值