剑指Offer:替换空格

题目1510:替换空格

时间限制:1 秒

内存限制:128 兆

特殊判题:否

提交:1697

解决:436

题目描述:

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

输入:

每个输入文件仅包含一组测试样例。
对于每组测试案例,输入一行代表要处理的字符串。

输出:

对应每个测试案例,出经过处理后的字符串。

样例输入:
We Are Happy
样例输出:
We%20Are%20Happy
【代码】

[cpp]  view plain copy
  1. /********************************* 
  2. *   日期:2013-10-16 
  3. *   作者:SJF0115 
  4. *   题号: 九度OJ 题目1510:替换空格 
  5. *   来源:http://ac.jobdu.com/problem.php?pid=1510 
  6. *   结果:AC 
  7. *   来源:剑指Offer 
  8. *   总结: 
  9. **********************************/  
  10. #include<stdio.h>  
  11. #include<string.h>  
  12.   
  13. char str[10000001];  
  14.   //直接写到main里面了,应该写到一个函数里面,main来调用
  15. int main()  
  16. {     
  17.     int i,j,len;  
  18.     while(gets(str)){  
  19.         int count = 0;  
  20.         int len = strlen(str);  
  21.         //统计空格的个数  
  22.         for(i = 0;i < len;i++){  
  23.             if(str[i] == ' '){  
  24.                 count++;  
  25.             }  
  26.         }  
  27.         //原始字符串末尾  
  28.         i = len;  
  29.         //替换之后字符串末尾  
  30.         j = 2*count+len;  //原来一个空格替换成了长度为3的20%
  31.         //i == j 表示空格替换完毕  



  1. //从后往前处理,只做了必要的移动(如果从前往后处理,做了许多多余的移动)



  1.         while(i != j && i >= 0){  
  2.             if(str[i] == ' ')
  3.             {  
  4.                 str[j--] = '0';  
  5.                 str[j--] = '2';  
  6.                 str[j--] = '%';  
  7.                 i--;  
  8.             }  
  9.             else
  10.             {  
  11.                 str[j] = str[i];  
  12.                 j--;  
  13.                 i--;  
  14.             }  
  15.         }  
  16.         //输出替换之后的字符串  
  17.         len = strlen(str);  
  18.         for(i = 0;i < len;i++){  
  19.             printf("%c",str[i]);  
  20.         }  
  21.         printf("\n");  
  22.     }  
  23.     return 0;  
  24. }  

【解析】






【第二种方法】








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值