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

来源:互联网 发布:java是男人下 编辑:程序博客网 时间:2024/04/29 20:43
#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;}
1 0
原创粉丝点击