标准C语言实现下列标准库函数,设计中不得使用其他库函数。
strstr库函数:
char
strstr(char
str1,char
str2);
在字符串str1中,寻找字串str2,若找到返回找到的位置,否则返回NULL。
#include
<iostream>
char
strstr(const
char
str1,
const
char
str2);
char
strstr(const
char
str1,
const
char
str2)
{
char
s1,
s2;
assert
((str1
!=
(char
)0)
&&
(str2
!=
(char
)0));
/
空字符串是任务字符串的子字符串
/
if
(''
==
str2)
{
return
((char
)str1);
}
while
(str1)
{
s1
=
(char
)str1;
s2
=
(char
)str2;
while
((s1
==
s2)
&&
s1
&&
s2)
{
s1++;
s2++;
}
if
(''
==
s2)
{
return
((char
)str1);
}
str1++;
}
/
查找不成功,返回NULL
/
return
((char
)0);
}
int
main(int
argc,char
argv[])
{
char
a[20]="abcde";
char
b[20]="bc";
printf("%s
",
strstr(a,b));
system
("pause");
return
0;
}
strrpl库函数:
/
把
s
中的字符串
s1
替换成
s2
/
char
strrpl(char
s,
const
char
s1,
const
char
s2)
{
char
ptr;
while
(ptr
=
strstr(s,
s1))
/
如果在s中找到s1
/
{
memmove(ptr
+
strlen(s2)
,
ptr
+
strlen(s1),
strlen(ptr)
-
strlen(s1)
+
1);
memcpy(ptr,
&s2[0],
strlen(s2));
}
return
s;
}
这个函数是查找匹配的子字符串,如果没有找到完全匹配的就往回空
找到了las则返回它再前面一个串中的位置。
在file_names_in[0]中 ,查找字符串“las”,==0表示查找失败的情况。
char strstr( const char string, const char strCharSet );
wchar_t wcsstr( const wchar_t string, const wchar_t strCharSet );
unsigned char _mbsstr( const unsigned char string, const unsigned char strCharSet );
Return Value
Each of these functions returns a pointer to the first occurrence of strCharSet in string, or NULL if strCharSet does not appear in string If strCharSet points to a string of zero length, the function returns string
Parameters
string
Null-terminated string to search
strCharSet
Null-terminated string to search for
我的MSDN是英文的,string 是一个空终止的字符串,strCharSet 是要查找的字符串,返回一个指针,指向找到的第一个匹配结果,没找到则返回NULL,如果strCharSet指向一个长度为0的字符串,则返回string
这个明显是参数传递有问题
解决方法,对于字符串常量,可以简单地在字符串前面加一个L来解决,对于字符串变量,可以使用mbtowc函数把双字节字符转化成Unicode,具体 *** 作方式参见msdn。总之,以后在遇到这样的编译错误,应该能够反应到是不是字符编码的问题。
strstr(a, b)是字符串查找或者叫字符串匹配函数:在a中查找b,若找到则返回第一次出现的位置,若找不到则返回空指针。
例如:
char a[] = "hello world";char b[] = "lo";
char p = strstr(a,b);//p指向的是字符串"lo world"
int len = strlen(p);//len值为字符串"lo world"的长度
int len2 = strlen(a) + 1 - len;//len2的值为字符串"hel"的长度+1,即为4
明白了没,printf("%d",strlen(a)+1-strlen(strstr(a,b)))的意思就是打印字符串b在字符串a中第一次出现位置之前的字符个数+1。
懒人应该用懒的办法,直接想办法把空格替换成'\0',替换成''0'之前把各个汉语拼音的第一个之母位置获取,就可以输出啦
//============非懒人办法====
#include<stringh>
void my_strcpy(chardst,const charsrc)
{
while(src != ' ' && src != '\0'
{
dst++ = src++;
}
dst = 0; //未作越界判断哦
}
void main()
{
const char s="tian shang ren jian";
char p[5][16];
const char p1;
for(int i=0,p1=s; i<4 && p1 != NULL; i++)
{
my_strcpy(p[i],p1);
printf("p[%d]=%s\n",i,p[i]);
p1 = strstr(p1," ");
if(p1) p1++;
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)