利用快慢下标操作字符串数组
1.去除掉多余的空格:
e.g.
Before: Life___is__short___I___use___python_‘\0‘(下划线为空格)
After: Life_is_short_I_use_python‘\0‘ (去除掉多余的空格)
去掉空格比较简单,我们可以通过逐个判断字符,如果有连续的空格就使数组左移直到只剩一个空格,可是这么做效率十分低下;
前面学习过利用快慢下标的方法实现快排思想,这里也可以采用类似的方法 :
对于删除后的数组,长度将减少或者不变,则指向删除后数组的下标是慢下标,另一个自然是快下标
!!我们这里暂时不考虑除空格外的其他空白字符如何处理(假设字符串数组中的空白字符只有空格):
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”:
和去除掉多余的空格一样,先找到两个遍历速度不同的下标。
在本例中,转换后的数组长度要增加,如果采取从后向前遍历的方式,则遍历新数组的指针为较快指针
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 }
利用快慢下标或者快慢指针可以较为便捷的解决很多问题 一定要掌握这种方法
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。