主要内容:剑指Offer习题3(二维数组查找)、4(空格替换)
思路:
代码:
//一、数组查找
//折半(二分)查找
int BinSearch(int *arr,int len,int key)
{
int low = 0;
int high = len-1;
int mid;
while(low <= high)
{
mid = (low+high)/2;
if(arr[mid] == key)
{
return mid;
}
else if(arr[mid] < key)
{
low = mid+1;
}
else
{
high = mid-1;
}
}
return mid;
}
bool Search(int (*arr)[4],int key)
{
int row = 4;
int col = 4;
int j;
for(int i=0;i<row;i++)
{
j = BinSearch(arr[i],col,key);
if(arr[i][j] == key)
{
return true;
}
else
{
col = j+1;
}
}
return false;
}
思路:
代码:
二、空格替换
void Replace(char *str,int length)
{
int count = 0;
int len=0;
for(int i=0;str[i]!='\0';i++)//获取字符串中空格个数
{
if(str[i]== ' ')
{
count ++;
}
len++;
}
int newlen=len + count*2;//添加空格后,新的长度
int p1= len;//保存源字符串下标
int p2 =newlen;//保存添加空格后的字符串长度
if(newlen >length)
{
return ;
}
while(p2 > p1)
{
if(str[p1] == ' ')//遇到空格时,替换为%20
{
str[p2--]='0';
str[p2--]='2';
str[p2--]='%';
}
else//没有遇到空格时,将p1指向的数据复制给p2指向的数据
{
str[p2--] = str[p1];
}
p1--;
}
}
int main()
{
int arr[4][4] = {1,2,8,9,2,4,9,12,4,7,10,13,6,8,11,15};
if(Search(arr,5))
{
printf("找到了\n");
}
else
{
printf("没有找到\n");
}
char str[100]="we are happy.";
Replace(str,100);
for(int i=0;str[i] != '\0';i++)
{
printf("%c",str[i]);
}
return 0;
}