C语言:我的字符串匹配函数
我这里运行,没有运行时错误,只是按你的代码结果不对。
创新互联长期为1000多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为静海企业提供专业的成都网站建设、网站建设,静海网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。
调整后代码如下:
#include stdio.h
#include string.h
char *strstr(char*str1,char*str2)
{
int n1 = strlen(str1);
int n2 = strlen(str2);
int flg = 0;
char *p1 = str1;
char *p2 = str2;
if(n1n2) return NULL;
int i;
for(i=0;in1-n2+1;i++)
{
p1 = str1+i;
p2 = str2;
while(*p2!=NULL)//
{
if(*p1!=*p2)
{
flg = 0;
p1++;
p2++;
break;
}
p1++;
p2++;
flg = 1;
}
if(flg) return str1+i;//你到底要输出什么,原函数是输出位置int
}
return NULL;//
}
int main()
{
char str1[]="str1adsfqwer";
char str2[]="ads";
char *p = strstr(str1,str2);
printf("%s\n",p);
return 0;
}
c语言字符串处理函数有哪些
1、puts函数——输出字符串的函数
一般的形式为puts(字符串组)
作用:将一个字符串输出到终端。如,char一个string,并赋予初值。调用puts(string);进行字符串的输出。
2、gets函数——输入字符串的函数
一般的形式:gets(字符数组)
作用:从终端输入一个字符串到字符数组,并且得到一个函数值成为字符数组的起始地址。
gets(str);
键盘输入,,,,你懂得。
注意:puts和gets函数只能输出或者输入一个字符串。
3、strcat函数——字符串连接函数
一般的形式:strcat(字符数组1,字符数组2);
作用:把两个字符串数组中字符串连接起来,把字符串2连接到字符串1的后面。
说明:字符数组1必须足够大,以便容纳连接后的新字符串。
4、strcpy/strncpy函数——字符串复制函数
一般形式:strcpy(字符数组1,字符串2);
作用:将字符串2复制到字符数组1中去。
如:char str1[10],str2[]="DongTeng";
strcpy(str1,str2);
执行后的结果为:你懂得
注意:
1. 不能用赋值语句直接将一个字符串常量或者字符数组直接给一个字符数组。
2. 用strncpy可以赋值指定的位置的字符。strncpy(str1,str2,3);将str2中的第3个字符复制到str1中。
5、strcmp函数——字符串比较函数
一般形式:strcmp(字符串1,字符串2);
作用:用来比较两个字符串的差异。具有不同的比较规则。
6、strlen函数——测字符串长度的函数
一般形式:strlen(字符数组);
如:char str[10]="DongTeng";
printf("%d",strlen(str));
得到的结果是:5
7、strlwr函数——转换为小写的函数
一般形式:strlwr(字符串);
8、strupr函数——转换为大写的函数
一般形式:strupr(字符串)。
C语言 字符串匹配
#include stdio.h
const char key[][12] = { "happy", "new", "year", "2014" };
// 是否完全匹配某一个特定的 key
int match1(const char *s, const char *t)
{
while (*s *t *s++ == *t++);
return !(*s || *t);
}
// 是否匹配一组 key 的中一个
int match(const char *s)
{
int i, j;
for (i = 0; i sizeof key / sizeof key[0]; i++)
if (match1(s, key[i]))
{
// 如果匹配到某个 key,则打印匹配到的 key
for (j = 0; key[i][j]; j++) putchar(key[i][j]);
putchar('\n');
return 1;
}
return 0;
}
int main()
{
char s[BUFSIZ];
int i, k;
// 输入一个字符串
for (i = 0; i BUFSIZ (s[i] = getchar()) != '\n'; i++);
s[i] = '\0';
match(s);
return 0;
}
以上程序是判断输入的字符串是否是某个 key 中的一个。
如果不要求完全匹配,而是要求检测输入的字符串是否含有某个 key,则程序如下:
#include stdio.h
const char key[][12] = { "happy", "new", "year", "2014" };
// 是否含有某一个特定的 key
int match1(const char *s, const char *t)
{
const char *p, *q, *r;
for (p = s, q = t; *p *q; p = r, q = t)
{
for (r = p + 1; *p == *q; p++, q++);
if (*q == '\0') return 1;
if (*p == '\0') return 0;
}
return 0;
}
// 是否含有一组 key 的中一个
int match(const char *s)
{
int i, j;
for (i = 0; i sizeof key / sizeof key[0]; i++)
if (match1(s, key[i]))
{
// 如果匹配到某个 key,则打印匹配到的 key
for (j = 0; key[i][j]; j++) putchar(key[i][j]);
putchar('\n');
return 1;
}
return 0;
}
int main()
{
char s[BUFSIZ];
int i, k;
// 输入一个字符串
for (i = 0; i BUFSIZ (s[i] = getchar()) != '\n'; i++);
s[i] = '\0';
if (match(s))
{
// 如果匹配到某个 key,则打印输入的原始字符串
for (k = 0; k i; k++) putchar(s[k]);
putchar('\n');
}
return 0;
}
文章名称:c语言匹配字符串函数,字符串模式匹配算法C语言
本文链接:http://lswzjz.com/article/hdhcic.html