把字符串中的空格替换为"%20"
2016-04-27 10:43
295 查看
题目描述:
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
输入:
每个输入文件仅包含一组测试样例。
对于每组测试案例,输入一行代表要处理的字符串。
输出:
对应每个测试案例,出经过处理后的字符串。
样例输入:
We Are Happy
样例输出:
We%20Are%20Happy
问题求解:
方法一:如果允许我们开辟一个新的数组来存放替换空格后的字符串,那么这道题目就非常简单。遍历原字符串,如果碰到空格就在新字符串上填入“%20”,否则就复制元字符串上的内容。
方法二:如果要求在原先的字符串上操作,并且保证原字符串有足够长的空间来存放替换后的字符串,那么我们就得另想方法。
如果从前往后替换字符串,那么保存在空格后面的字符串肯定会被覆盖,那么我们就考虑从后往前进行替换。!!!
扩展:如果要清除空格,则更加容易。清除空格后所得到的字符串要比原先的字符串要短,从头到尾进行清除空格的话就不会覆盖到空格后面的字符,可以从头开始清除。具体操作:
设定两个指针p1和p2初始状态都指向字符串首字符。如果p2指向的元素不为空格,那么将p2指向的内容赋值给p1,然后p1和p2指向下一个元素;如果p2指向的内容为空格,那么p2指向下一个元素。直到p2指向字符串末尾的’\0’时清除空格结束。
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
输入:
每个输入文件仅包含一组测试样例。
对于每组测试案例,输入一行代表要处理的字符串。
输出:
对应每个测试案例,出经过处理后的字符串。
样例输入:
We Are Happy
样例输出:
We%20Are%20Happy
问题求解:
方法一:如果允许我们开辟一个新的数组来存放替换空格后的字符串,那么这道题目就非常简单。遍历原字符串,如果碰到空格就在新字符串上填入“%20”,否则就复制元字符串上的内容。
#include <iostream> using namespace std; string ReplaceBlank(string s) { int n=s.size(); string res=""; for(int i=0;i<n;i++) { if(s[i]==' ') { res += "%20"; } else { res.push_back(s[i]); } } return res; } int main() { //string s="We Are Happy"; string s; getline(cin, s); string res = ReplaceBlank(s); cout<<res<<endl; return 0; }
方法二:如果要求在原先的字符串上操作,并且保证原字符串有足够长的空间来存放替换后的字符串,那么我们就得另想方法。
如果从前往后替换字符串,那么保存在空格后面的字符串肯定会被覆盖,那么我们就考虑从后往前进行替换。!!!
(1)首先遍历原字符串,找出其中的空格数量 (2)根据原字符串的长度和空格的数量我们可以求出最后新字符串的长度。 (3)设置两个指针point1和point2分别指向原字符串和新字符串的末尾位置。 (4)如果point1指向内容不为空格,那么将内容赋值给point2指向的位置,如果point1指 向为空格,那么从point2开始赋值“02%” (5)直到point1==point2时表明字符串中的所有空格都已经替换完毕。
#include <iostream> #include<stdio.h> #include<string.h> using namespace std; char str[10000001]; void blankReplace(char str[], int len) { int count = 0; //统计空格的个数 for(int i = 0;i < len;i++){ if(str[i] == ' '){ count++; } } //原始字符串末尾 int i = len; //替换之后字符串末尾 int j = 2*count+len; //i == j 表示空格替换完毕 while(i != j && i >= 0){ if(str[i] == ' '){ str[j--] = '0'; str[j--] = '2'; str[j--] = '%'; i--; } else{ str[j--] = str[i--]; } } } int main() { gets(str); int len = strlen(str); blankReplace(str, len); //输出替换之后的字符串 puts(str); return 0; }
扩展:如果要清除空格,则更加容易。清除空格后所得到的字符串要比原先的字符串要短,从头到尾进行清除空格的话就不会覆盖到空格后面的字符,可以从头开始清除。具体操作:
设定两个指针p1和p2初始状态都指向字符串首字符。如果p2指向的元素不为空格,那么将p2指向的内容赋值给p1,然后p1和p2指向下一个元素;如果p2指向的内容为空格,那么p2指向下一个元素。直到p2指向字符串末尾的’\0’时清除空格结束。
相关文章推荐
- iOS 委托 协议
- android 定义颜色color时6位或8位值的区别
- c++: stringstream的使用
- vtk实战(十三)——读取DICOM影像文件
- rand()%N-----随机数的获取,51级单片机
- POJ3628 Bookshelf2
- Android 从framework层到HAL层调用实现(蓝牙串口)
- iOS 绘制不规则图形,并且添加点击事件
- HDFS源码分析数据块校验之DataBlockScanner
- 二叉树系列(1)已知二叉树的中序遍历和前序遍历,如何求后序遍历
- Activity 启动模式 图解
- centos7利用ngxtop监控nginx
- HTML打开摄像头,进行拍照上传
- hdu3068 manacher算法模板
- 车载WIFi数据
- c# 泛型 束缚关系和default
- 个人博客koalahl.github.io
- maven私服配置
- 基于传统复制模式下的主从同步搭建测试
- spring注解