3.二维数组的查找
二维数组matrix的每一行和每一列都是递增排序的,查找x是否在matrix中,存在则返回true,否则返回false。
例如:
1 2 4 9
2 5 7 10
3 6 8 12
9 11 13 15
查询8,返回true。
分析:
程序要求输入:matrix(一个指针),行数,列数,x
查找过程:每次和行/列最小值比较,则可以排除一行或一列。查询8时,先和第4列的第一个元素9比较,排除第4列;和第三列的第一个元素4比较,排除第一行;和第3列的第二个元素7比较,排除第二行;和第三列的第三个元素8比较,返回true。
代码:
bool find(int* matrix, int rows, int columns, int x){
if (matrix == NULL | rows=0 | columns =0)//检测空指针
return false;
int r=0;
int c=columns-1;
while (r<rows && c>=0)
{
if (matrix[r*columns+c] > x)//多维数组的一维表示
c--;
else if (matrix[r*columns+c] < x)
r++;
else
return true;
}
return false;
}
4.替换空格
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
char* ReplaceSpace(char* str, char* restr);
int main(int argc, int** argv)
{
char str[20]="we are happy.";
char* restr="%20";
ReplaceSpace(str,restr);
printf("%s",str);
}
char* ReplaceSpace(char* str, char* restr){
int spacecount=0;
char* p1=str;
char* p2;
//char* newstr;
int i=0;
int j=0;
int rsize;
//统计空格数,p1最后指向str的'\0'
while (*p1 != '\0')
{
if (*p1 == ' ')
spacecount++;
p1++;
}
//计算新串的长度,不计'\0'
rsize=(strlen(str)+(strlen(restr)-1)*spacecount)*sizeof(char);
//newstr= (char*)realloc(str,rsize);///realloc出错!!!!堆错误
//assert(str);
//if (str == NULL)
//return NULL;
//p2指向新串的'\0'位置,第一个复制的是老串的'\0'到新串的'\0'位置
p2=str+rsize;
for (i=0;i<spacecount;i++)
{
//复制每个单词
while (*p1!=' ')
*p2--=*p1--;
p1--;//跳过空格
//填充restr
j=strlen(restr);
while(j>0)
*p2--=restr[--j];
}
}