CTCI系列--1.4 字符替换(C语言)
2016-01-25 00:00
495 查看
题目: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'
####代码实现
算法代码与测试程序如下:
####运行结果
![](https://static.oschina.net/uploads/img/201601/25092227_1vQ3.jpg)
文章转载自我的非鱼物语
本文固定链接为:http://linuxue.com/archives/20
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; }
####运行结果
![](https://static.oschina.net/uploads/img/201601/25092227_1vQ3.jpg)
文章转载自我的非鱼物语
本文固定链接为:http://linuxue.com/archives/20
相关文章推荐
- Linux C函数参考手册(PDF版)
- 只有程序员看的懂的面试圣经|如何拿下编程面试
- 下一次技术面试时要问的 3 个重要问题
- Lua教程(十七):C API简介
- 简单谈谈lua和c的交互
- PHP程序员面试 切忌急功近利(更需要注重以后的发展)
- C#实现打造气泡屏幕保护效果
- 使用C#代码获取存储过程返回值
- C/C++数据对齐详细解析
- 利用C语言来求最大连续子序列乘积的方法
- 字符串的组合算法问题的C语言实现攻略
- C 语言基础教程(我的C之旅开始了)[三]
- 学习C和C++的9点经验总结
- C++中的extern “C”用法详解
- C 语言基础教程(我的C之旅开始了)[七]
- 最大子矩阵问题实例解析
- C字符串操作函数实现方法小结
- C语言中static的作用及C语言中使用静态函数有何好处
- 字典树的基本知识及使用C语言的相关实现