剑指Offer:替换空格
- /*********************************
- * 日期:2013-10-16
- * 作者:SJF0115
- * 题号: 九度OJ 题目1510:替换空格
- * 来源:http://ac.jobdu.com/problem.php?pid=1510
- * 结果:AC
- * 来源:剑指Offer
- * 总结:
- **********************************/
- #include<stdio.h>
- #include<string.h>
- char str[10000001];
- //直接写到main里面了,应该写到一个函数里面,main来调用
- int main()
- {
- int i,j,len;
- while(gets(str)){
- int count = 0;
- int len = strlen(str);
- //统计空格的个数
- for(i = 0;i < len;i++){
- if(str[i] == ' '){
- count++;
- }
- }
- //原始字符串末尾
- i = len;
- //替换之后字符串末尾
- j = 2*count+len; //原来一个空格替换成了长度为3的20%
- //i == j 表示空格替换完毕
- //从后往前处理,只做了必要的移动(如果从前往后处理,做了许多多余的移动)
- while(i != j && i >= 0){
- if(str[i] == ' ')
- {
- str[j--] = '0';
- str[j--] = '2';
- str[j--] = '%';
- i--;
- }
- else
- {
- str[j] = str[i];
- j--;
- i--;
- }
- }
- //输出替换之后的字符串
- len = strlen(str);
- for(i = 0;i < len;i++){
- printf("%c",str[i]);
- }
- printf("\n");
- }
- return 0;
- }
【解析】
【第二种方法】