C++用%20替换字符串中的空格(O(n)的时间效率)

#include <iostream>
#include <malloc.h>

#include <string.h>
using namespace std;
//将字符串中的空格用%20替换。
void Grial(char *str)
{
    if(str==NULL)return ;
    char *p = str;
    char *q = NULL;
    char buf[strlen(str)+1];
    int count = 0;//计数空格数.
    while(*p!=‘\0‘)
    {
        if(*p==‘ ‘) 
            count ++;
        p++;
    }
    strcpy(buf,str);
    int n = strlen(str)+2*count+1;
    str = (char *)malloc(n);
    memset(str,‘\0‘,sizeof(str));
    strcpy(str,buf);

    p  = str+n-1;//n是字符串包括‘\0‘的长度,我想让p指向对后一个‘\0‘位置,我让str+n指向的是‘\0‘后面的位置,
                             //所以p=str+n-1才是指向对后一个位置‘\0‘,为什么我要写一遍这个,我纠结了半天怎么错位了,奶奶的,
                            //30分钟没有了,以后长记性。
  q  = p-count*2;
    while(1)
    {
        if(*q == ‘ ‘)
        {
            *p=‘0‘;
            p--;
            *p=‘2‘;
            p--;
            *p=‘%‘;
        }
        else
            {
                *p = *q;
            }
        if(p==q)break;
        q--;
        p--;
    }
    cout<<str<<endl;
}

int main()
{
    char a[]="you are a good boy!!!";
    Grial(a);
    return 0;
}


/*---------------------------------------------------------------------------------------*/
#include <iostream>
//求递增二维数组中的一个值。
//我一个同学在2面笔试中遇到这个题了。
using namespace std;
int Grial(int (*a)[6],int x,int y,int val)
{
    int i = y-1;
    int j = 0;
    while(i!=0 && j!=x)
    {
        if(a[j][i]>val)
        {
            i--;
        }
        else if(a[j][i]<val)
        {
            j++;
        }
        else
        {
            return a[j][i];
        }
    }
    return false;   
}

int main()
{
    int a[][6]={1,3,4,6,7,9,
                     2,4,5,7,9,10,
                     4,5,7,8,10,13,
                        };
    cout<<Grial(a,3,6,3)<<endl;
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。