CTCI 系列 --1.4 字符替换(C 语言)

本贴最后更新于 2668 天前,其中的信息可能已经斗转星移

题目:Write a method to replace all spaces in a string with '%20'.You may assume that the string has sufficient space at the end of the string to hold the additional characters,and that you are given the "true" length of the string.(Note:if implementing in Java,please use a character array so that you can perform this operation in place.)
EXAMPLE
Input: "Mr John Smith "
Output:"Mr%20John%Smith"
写一个方法用'%20'替换字符串中的所有空格。你需要确保字符串有足够的空间来存储额外的字符,你被给与字符串的真实长度。(注意:如果用 Java 实现,请使用 character array 这样你可以执行这个操作。)


解题思路

首先按照题目意思是将空格替换为'%20',但按照题目给的示例字符串末尾的空格并没有转换成'%20'。我们这里还是按照将所有空格都转换成'%20'来处理。

在字符串处理中有个通用的方法是从字符串的末尾开始往回处理,我们这里就使用这个方法。

步骤:

  • 获取字符串有效长度以及字符数组的总大小
  • 计算字符串中空格的数目
  • 计算替换空格后字符串的总长度并与字符数组大小比较。若超出字符数组大小则报错
  • 从字符串末尾开始将字符搬移到新的位置,若遇空格则替换为'%20'

代码实现

算法代码与测试程序如下:

#include <stdio.h>
#include <string.h>

int replaceSpace(char *str, int totalLen)
{
	int newStrLen = 0;
	int originStrLen = 0;
	int spaceCount = 0;
	int i;

	originStrLen = strlen(str);

	for (i = 0; i < originStrLen; i++)
	{
		if (str[i] == ' ')
		{
			spaceCount++;
		}
	}

	newStrLen = originStrLen + spaceCount * 2;

	if (newStrLen + 1 > totalLen)
		return -1;
	str[newStrLen] = '\0';
	for (i = originStrLen - 1; i > 0; i--)
	{
		if (str[i] == ' ')
		{
			str[newStrLen - 1] = '0';
			str[newStrLen - 2] = '2';
			str[newStrLen - 3] = '%';
			newStrLen = newStrLen - 3;
		}
		else
		{
			str[newStrLen - 1] = str[i];
			newStrLen = newStrLen - 1;
		}
	}
	return 0;
}

#define BUFLENS  50
int main(void)
{
	char buf[BUFLENS] = "Mr John Smith   ";

	printf("%s\n", buf);

	replaceSpace(buf, BUFLENS);

	printf("%s\n", buf);

	getchar();
	return 0;
}

运行结果

运行结果

  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    83 引用 • 165 回帖 • 62 关注
  • 算法
    388 引用 • 254 回帖 • 22 关注
  • CTCI
    5 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...