Exercise 5-4. Write the function strend(s,t), which returns 1 if the string t occurs at the
end of the string s, and zero otherwise.
简单问题,复习语言。
最直接的想法:
//The C Programming Language 2nd Edition Execise5-4 Answer
//by DaNmarner
//http://blog.youkuaiyun.com//DaNmarner
#include<stdio.h>
int strend(char *s,char *t)
{
char *ps,*pt;
while (*s != '/0'){
for(ps = s,pt = t;*ps == *pt;ps++,pt++)
if(*ps == '/0' || *pt == '/0') break;
if (*ps == '/0' && *pt == '/0') return 1;
s++;
}
return 0;
}
int strend(char *s,char *t)
{
char *ps,*pt;
while (*s != '/0'){
for(ps = s,pt = t;*ps == *pt;ps++,pt++)
if(*ps == '/0' || *pt == '/0') break;
if (*ps == '/0' && *pt == '/0') return 1;
s++;
}
return 0;
}
但其实这个算法效率很低,O(N^2)。下面这个就好多了:
//The C Programming Language 2nd Edition Execise5-4 Answer
//by DaNmarner
//http://blog.youkuaiyun.com//DaNmarner
#include<stdio.h>
#include<string.h>
int strend2(char *s,char *t)
{
int ls = strlen(s);
int lt = strlen(t);
if (lt > ls) return 0;
while(s[--ls] == t[--lt] && lt >= 0);
if (lt == -1) return 1;
else return 0;
}
这就是O(n)了~

1360

被折叠的 条评论
为什么被折叠?



