【2】数组空格替换
来源:互联网 发布:冒险岛2属性数据 编辑:程序博客网 时间:2024/05/17 02:23
【2】替换空格
- 时间限制:1秒
- 空间限制:32768K
- 本题知识点: 字符串
题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。
例如,当字符串为We Are Happy.
则经过替换之后的字符串为We%20Are%20Happy。
牛客网题目链接:点击这里
vs2010中测试代码
#include <iostream>using namespace std;//无效方案//void replaceSpace(char *str, int length)//{// int Num_char=0;// int Num_space=0;//// char *temp=NULL;// char *p=str;// char *t=NULL;// for(; (*p)!='\0'; p++)// {// Num_char++;// if((*p)==' ')// Num_space++;// }// // temp=(char*)malloc(Num_char+Num_space*2); //定义临时字符串大小// t=temp+(Num_char+Num_space*2);// // *t='\0'; //将结束符挪到最后// p--; t--;//// while( p>=str ) // {// if(*p!=' ') //字符直接复制到最后位置// { // *t=*p; // p--; t--;// }// else //空格时替换// {// *t='0'; t--;// *t='2'; t--;// *t='%'; t--;// p--;// }// }// str=temp; //这里仅是让指针指向新建的字符串, // cout<<str<<endl; //而并未改变例程test1中的字符串。//}//提示1:数组字符串可以越界,而指针字符串为常量,无法修改和越界。//提示2:sizeof字符数组,得出的长度包含'\0'结束符。//改进方案void replaceSpace(char *str, int length){int Num_char=0; //获取字符串长度,也可用sizeofint Num_space=0; //获取空格数量char *p=str;char *t=NULL;for(; (*p)!='\0'; p++){ Num_char++; if((*p)==' ') Num_space++;}t=str+Num_char+Num_space*2;*t=*p; //将结束符复制过去t--; p--;while(t!=p){ if(*p!=' ') //字符直接复制到最后位置 { *t=*p; p--; t--; } else //空格时替换 { *t='0'; t--; *t='2'; t--; *t='%'; t--; p--; }}}//字符串结束符为“\0”int main(){char test1[]="hello world"; //经验证测试例程为数组,//char *test2="hello world"; //并非指针字符串。指针字符串无法改变。cout<<test1<<endl;replaceSpace( test1, 10);cout<<test1<<endl;}
说明:
- 该代码会输出正确结果,但同时程序会发生中止现象,可能是因为数组发生越界行为。
- 但把代码提交到牛客网上便顺利通过,以下为牛客网提交代码。
//length为牛客系统规定字符串输出的最大长度,固定为一个常数class Solution {public: void replaceSpace(char *str,int length) { //不合理输入 if(str==NULL || length<0) return; unsigned int num=0; int i=0; for(; i<length && str[i]!='\0'; i++) { if(str[i]==' ') num++; } int j=i+2*num; //不够分的情况 if(j>length) return; for( ; i>=0; i--) { if(i==j) break; //此处不能写成str[i]==str[j] if(str[i]==' ') { str[j]='0'; j--; str[j]='2'; j--; str[j]='%'; j--; } else { str[j]=str[i]; j--; } } }};
截图证明:
思考:
优化:可将原数组中的空格位置记下,从而直接进行替换。
1 0
- 【2】数组空格替换
- 替换空格 合并数组字符串
- 字符串数组空格的替换
- 剑指offer_数组---替换空格
- 空格替换2
- 2.3.2替换空格
- 2、替换空格
- day 2 替换空格
- C++算法之 替换数组空格
- 4. 替换空格(字符数组)
- 替换给定字符数组的空格
- 面试题2:替换空格
- 剑指offer 2 替换空格
- 剑指offer[2]替换空格
- 算法题2:替换空格
- 剑指offer(2):替换空格
- 字符串替换空格:请实现一个函数,把字符数组中的每个空格替换成“%20”。
- 字符串替换空格:请实现一个函数,把字符数组中的每个空格替换成“%20”
- Maximum Subarray
- 为你的网页中添加一些空格
- 【JavaScript】Function函数
- C# 委托和事件,以及observer设计模式
- Linux 设备驱动开发 —— 设备树在platform设备驱动中的使用
- 【2】数组空格替换
- 友盟的开发者文档,实现第三方登录
- 模拟数据库,实现注册和登录界面(偏好设置)
- 线程池的使用
- 在一台电脑上,运行两个或多个tomcat
- Linux 设备驱动开发 —— platform设备驱动应用实例解析
- Fragment ListFragment相关API
- CountDownLatch、CyclicBarrier和Semaphore
- 参与感篇