码迷,mamicode.com
首页 > 编程语言 > 详细

利用快慢下标操作字符串数组

时间:2014-10-12 00:36:36      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   ar   for   sp   div   问题   on   

1.去除掉多余的空格: 

e.g.

Before:   Life___is__short___I___use___python_‘\0‘(下划线为空格)

After:  Life_is_short_I_use_python‘\0‘ (去除掉多余的空格)

 

去掉空格比较简单,我们可以通过逐个判断字符,如果有连续的空格就使数组左移直到只剩一个空格,可是这么做效率十分低下; 

前面学习过利用快慢下标的方法实现快排思想,这里也可以采用类似的方法 : 

对于删除后的数组,长度将减少或者不变,则指向删除后数组的下标是慢下标,另一个自然是快下标

!!我们这里暂时不考虑除空格外的其他空白字符如何处理(假设字符串数组中的空白字符只有空格):

 1 void trim_space(char *str)
 2 {
 3     int index_i=0,index_j=0;
 4     while(str[index_j]){
 5         if(str[index_j]!= ||(str[index_j]== &&index_i!=0&&str[index_i-1]!= )){
 6             str[index_i++]=str[index_j++];
 7         }else{
 8             index_j++;
 9         }
10     }
11     if(str[index_i-1]== ){
12         str[index_i-1]=\0;
13     }else{
14         str[index_i]=\0;
15     }

16 } 

 

快慢下标还可以用来实现将字符串中的空格转换成%020

‘ ’转换成“%020”: 

和去除掉多余的空格一样,先找到两个遍历速度不同的下标。

在本例中,转换后的数组长度要增加,如果采取从后向前遍历的方式,则遍历新数组的指针为较快指针 

 

 1 void reserve_space(char *str)
 2 {
 3     int count=0;
 4     int index;
 5     for(index=0;str[index];index++){
 6         if(str[index]== ){
 7             count++;
 8         }
 9     }
10     index=strlen(str);
11     int index_j=index+count*3;
12     while(index_j>=0){
13         if(str[index]!= ){
14             str[index_j--]=str[index--];
15         }else{
16             str[index_j--]=0;
17             str[index_j--]=2;
18             str[index_j--]=0;
19             str[index_j--]=%;
20             index--;
21         }
22     }

23 } 

 

利用快慢下标或者快慢指针可以较为便捷的解决很多问题  一定要掌握这种方法 

 

利用快慢下标操作字符串数组

标签:style   blog   color   ar   for   sp   div   问题   on   

原文地址:http://www.cnblogs.com/katsura-youhei/p/fast_slow_index_for_string.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!