strchr,strrchr函数的测试及实现;(提示:学员可参考man手册)1.c
/**
* @file 1.c
* @brief strchr,strrchr函数的测试及实现
* @author GuoPengyu
* @version 0.1
* @date 2011-09-09
*/
#include <stdio.h>
char * mystrchr(char *s, char c)
{
while(*s)
{
if(*s == c)
return s;
s++;
}
return NULL;
}
char * mystrrchr(char *s, char c)
{
int i = 0;
while(s[i++]);
while(--i)
{
if(s[i] == c)
return &s[i];
}
return NULL;
}
char * mystrrchr2(char *s, char c)
{
char *p = NULL;
while(1)
{
if(*s == c)
p = s;
if(*s == '\0')
return p;
s++;
}
return NULL;
}
int main(int argc, const char *argv[])
{
char *s = "hello world!";
char *tmp;
if(tmp = mystrchr(s, 'l'))
puts(tmp);
if(tmp = mystrrchr(s, 'l'))
puts(tmp);
if(tmp = mystrrchr2(s, 'l'))
puts(tmp);
return 0;
}
strstr函数的测试及实现;2.c
/**
* @file 2.c
* @brief strstr函数的测试及实现
* @author GuoPengyu
* @version 0.1
* @date 2011-09-09
*/
#include <stdio.h>
#include <string.h>
char * mystrstr(char *str, char *substr)
{
while(*str)
{
if(strncmp(str, substr, strlen(substr)) == 0)
return str;
str++;
}
return NULL;
}
int main(int argc, const char *argv[])
{
char *str = "hello world!";
char *substr = "or";
printf("%s\n", mystrstr(str, substr));
return 0;
}
输入字符串,同时输入帧头和帧尾(可多个字符),将该字符串中合法的帧识别出来。
示例:帧头:1a2b 帧尾:3c4d
输入字串:001a2bssddef3c4d4asf1a2bddaaee343c4d1a2bttt1a2bddd 3c4d3c4d
思路1:3.c
/**
* @file 3.c
* @brief
* 输入字符串,同时输入帧头和帧尾(可多个字符),将该字符串中合法的帧识别出来。
* 示例:帧头:1a2b 帧尾:3c4d
* 输入字串:001a2bssddef3c4d4asf1a2bddaaee343c4d1a2bttt1a2bddd 3c4d3c4d
* @author GaoJinlong
* @version 0.1
* @date 2011-09-09
*/
#include <stdio.h>
#include <string.h>
int find_str(char *base, char *head, char *tail, char *str[])
{
int i = 0;
char *tmp;
while(*base)
{
if(tmp = strstr(base, head))
str[i++] = tmp + strlen(head);
else
return i;
if(tmp = strstr(base, tail))
{
base = tmp + strlen(tail);
*tmp = '\0';
}
else
return i - 2;
}
return i;
}
int main(int argc, const char *argv[])
{
int num, i;
char base[200] = "001a2bssddef3c4d4asf1a2bddaaee343c4d1a2bttt1a2bddd3c4d3c4d";
char *head = "1a2b";
char *tail = "3c4d";
char *str[10];
num = find_str(base, head, tail, str);
for(i = 0; i < num; i++)
puts(str[i]);
return 0;
}
思路2:3_2.c
/**
* @file 3_2.c
* @brief
* 输入字符串,同时输入帧头和帧尾(可多个字符),将该字符串中合法的帧识别出来。
* 示例:帧头:1a2b 帧尾:3c4d
* 输入字串:001a2bssddef3c4d4asf1a2bddaaee343c4d1a2bttt1a2bddd 3c4d3c4d
* @author GuoPengyu
* @version 0.1
* @date 2011-09-09
*/
#include <stdio.h>
#include <string.h>
#define LEN 128
int main(void)
{
char *str1 = "1a2b";
char *str2 = "3c4d";
char str[LEN];
char *start, *end, *p;
fgets(str, LEN, stdin);
start = end = str;
do
{
start = strstr(start, str1);
end = strstr(end, str2);
if (!start || !end)
break;
if (end < start)
{
end = start + 1;
continue;
}
for(p = start + 4; p < end; p++)
printf("%c", *p);
printf("\n");
start = end = end + 1;
} while(start < str + strlen(str));
return 0;
}