电脑:MAC 64位
编译工具:xcode
2.3.1数组
#include <stdio.h>
int GetSize(int data[])
{
return sizeof(data);
}
int main(int argc, const char * argv[]){
int data1[] = {1,2,3,4,5};
int size1 = sizeof(data1);
int *data2 = data1;
int size2 = sizeof(data2);
int size3 = GetSize(data1);
printf("%d,%d,%d\n",size1,size2,size3);
return 0;
}
输出结果:
20,8,8
面试题3:二维数组中的查找
1)从右上角开始找:说明
xcode中无bool,需要重新定义
#include <stdio.h>
typedef enum{
false,
true
}bool;
bool Find(int *matrix, int rows, int columns, int number ){
bool found = false;
if(matrix != NULL && rows > 0 && columns > 0){
int row = 0 ;
int column = columns - 1 ;
while(row<rows && column>=0){
if(matrix[row*4+column] == number){
printf ("The number is %d,row = %d,column = %d\n",matrix[row*4+column],row+1,column+1);
found = true;
break;
}else if(matrix[row*4+column] > number){
--column;
}else{
++row;
}
}
}
if(found == false){
printf("matrix have no number %d\n",number);
}
return found;
}
void main() {
int matrix[][4] = {1,2,8,9,2,4,9,12,4,7,10,13,6,8,11,15};
bool flag = Find((int *)matrix, 4, 4, 15);
}
结果
The number is 15,row = 4,column = 4
matrix have no number 100
Program ended with exit code: 0
2)从左下角开始找,可以找到全部重复的数字/找出最大最小值/查找没有的数字
#include <stdio.h>
typedef enum{
false,
true
}bool;
bool Find(int *matrix, int rows, int columns, int number ){
bool found = false;
if(matrix != NULL && rows > 0 && columns > 0)
{
int column = 0 ;
int row = rows - 1 ;
while(matrix != NULL&& rows > 0 && columns > 0)
{
while(matrix != NULL && rows > 0 && columns > 0)
{
if(matrix[row*4+column] == number)
{
printf ("The number is %d,row = %d,column = %d\n",matrix[row*4+column],row+1,column+1);
found = true;
break;
}else if(matrix[row*4+column] < number)
{
++column;
if(column>3){
break;
}
}else
{
--row;
}
}
--row;
++column;
if(row<0 || column>3)
{
break;
}
}
}
if(found == false){
printf("matrix have no number %d\n",number);
}
return found;
}
int main() {
int matrix[][4] = {1,2,8,9,2,4,9,12,4,7,10,13,6,8,11,15};
Find((int *)matrix, 4, 4, 9);//double
Find((int *)matrix, 4, 4, 2);
Find((int *)matrix, 4, 4, 15);//max
Find((int *)matrix, 4, 4, 1);//min
Find((int *)matrix, 4, 4, 11115);//none
return 0;
}
结果
The number is 9,row = 2,column = 3
The number is 9,row = 1,column = 4
The number is 2,row = 2,column = 1
The number is 2,row = 1,column = 2
The number is 15,row = 4,column = 4
The number is 1,row = 1,column = 1
matrix have no number 11115
面试题4:替换空格
说明:含mac上编译通过的c代码和测试用例
#include <stdio.h>
void ReplaceBlank(char string[],int length){
if(string == NULL & length <= 0)
{
return;
}
int originalLength = 0;
int numberOfBlank = 0;
int i = 0;
while(string[i] != '\0')
{
++originalLength;
if(string[i] == ' ')
{
++numberOfBlank;
}
i++;
}
int newLength = originalLength + numberOfBlank*2;
if(newLength>length)
{
return;
}
int indexOfOriginal = originalLength;
int indexOfNew = newLength;
while (indexOfOriginal>=0 && indexOfNew>indexOfOriginal)
{
if(string[indexOfOriginal]==' ')
{
string[indexOfNew--] = '0';
string[indexOfNew--] = '2';
string[indexOfNew--] = '%';
}
else
{
string[indexOfNew--] = string[indexOfOriginal];
}
--indexOfOriginal;
}
}
void main(){
char m1[30] = "We are happy.";
ReplaceBlank(m1,30);
printf("%s\n",m1);
//test2:blank in first
char m2[30] = " We are happy.";
ReplaceBlank(m2,30);
printf("%s\n",m2);
//test3:blank in last
char m3[30] = "We are happy. ";
ReplaceBlank(m3,30);
printf("%s\n",m3);
//test4:blank continue
char m4[30] = "We are happy.";
ReplaceBlank(m4,30);
printf("%s\n",m4);
//test5:no blank
char m5[30] = "Wearehappy.";
ReplaceBlank(m5,30);
printf("%s\n",m5);
//test6:NULL
char m6[30];
ReplaceBlank(m6,30);
printf("%s\n",m6);
//test7:NULL
char m7[30] = "";
ReplaceBlank(m7,30);
printf("%s\n",m7);
//test8:only one black
char m8[30] = " ";
ReplaceBlank(m8,30);
printf("%s\n",m8);
//test9:only 3black continue
char m9[30] = " ";
ReplaceBlank(m9,30);
printf("%s\n",m9);
}
输出结果:
We%20are%20happy.
%20We%20are%20happy.
We%20are%20happy.%20
We%20%20are%20%20happy.
Wearehappy.
%20
%20%20%20
Program ended with exit code: 10