1.写一个函数,根据两个文件的绝对路径算出相对路径。如a = “qihoo/app/a/b/c/d/new.c”,b = “/qihoo/app/1/2/test.c”,那么b相对于a的相对路径是”../../../../1/2/test.c”
//ComputationalRelativePath.cpp
#include <iostream>
#include <cstring>
#include <cassert>
using namespace std;
void ComputationalRelativePath(char *str1,char *str2)
{
assert(str1 != NULL && str2 != NULL);
int i;
char *p = NULL,*q = NULL;
char temp[128] = {'\0'};
for(i = 0; i < strlen(str1); ++i)
{
if(str1[i] != str2[i])
{
p = str1+i;
q = str2+i;
break;
}
}
while(str1[i++] != '\0')
{
if(str1[i] == '/')
strcat(temp,"../");
}
strcat(temp,q);
cout<<temp<<endl;
}
int main()
{
char str1[] = "/qihoo/app/a/b/c/d/new.c";
char str2[] = "/qihoo/app/1/2/test.c";
ComputationalRelativePath(str1,str2);
return 0;
}
2.有一个二维float数组,有m行n列,每一个行和列上都是递减序列,请编程实现在这个矩阵中查找值等于v的元素的函数,如果找到返回其下标。
剑指offer书上第二章的题目,略作修改
#include <math.h>
#include <iostream>
using namespace std;
int* Find(float matrix[][4], int rows, int columns, int numbers)
{
if(matrix!=NULL && rows>0 && columns>0)
{
int *a = new int[2];
int row = 0;
int column = columns - 1;
while(row < rows && column < columns)
{
if( (fabs(matrix[row][column]-numbers))<1e-7 )
{
a[0] = row;
a[1] = column;
return a;
}
else if(matrix[row][column] < numbers)
column--;
else
row++;
}
return NULL;
}
}
int main()
{
float a[4][4] = {15,11,8,6,13,10,7,4,12,9,4,2,9,8,2,1};
int *b = Find(a,4,4,9);
cout<<b[0]<<" "<<b[1]<<endl;
delete []b;
return 0;
}
3.字符串A和B的最长公共单词
LongestCommon_Substring
最长公共字符串,即经典的KMP算法,KMP算法的实现比较复杂,我这里用了暴力破解的办法,虽然时间复杂度较高,但是容易维护。有兴趣的同学可以去看看这篇文章对于KMP算法的介绍
#include <string.h>
#include <iostream>
#include <string>
using namespace std;
void LongestCommon_Substring(char *str1,char *str2,char *result)
{
if(str1 == NULL || str2 == NULL)
return;
int maxlength = 0;
int curpositin = -1;
for(int i = 0; i < strlen(str1); ++i)
{
for(int j = 0; j < strlen(str2); ++j)
{
if(str1[i] == str2[j])
{
for(int k = 1; str1[i+k]==str2[j+k]&&str1[i+k]!='\0'; ++k)
{
if(k > maxlength)
{
maxlength = k;
curpositin = i;
}
}
}
}
}
if(curpositin == -1)
return;
else
{
memcpy(result,str1+curpositin,maxlength);
result[maxlength] = '\0';
}
}
int main()
{
char result[512] = {'\0'};;
LongestCommon_Substring("zhangligou","gligzhangligu",result);
cout<<result<<endl;
return 0;
}