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