1,strlen
统计字符串的长度但不包括'\0'
int my_strlen(char s[])
{
int i,len=0;
for(i=0;s[i]!='\0';i++)
len++;
return len;
}
2,strcmp
两个字符串比较大小s1大于等于小于s2分别输出1,0,-1
int my_strcmp(char s1[],char s2[])
{
int i;
for(i=0;;i++)
{ if(s1[i]>s2[i])
return 1;
if(s1[i]<s2[i])
return -1;
if(s1[i]!='\0'&&s2[i]=='\0')
return 1;
if(s1[i]=='\0'&&s2[i]!='\0')
return -1;
if(s1[i]=='\0'&&s2[i]=='\0')
return 0;
}
}
3,strcpy
将字符串s2的内容复制给s1,s1的长度要大于等于s2;
void my_strcpy(char *p1,char *p2)
{
for(;*p2!='\0';p1++,p2++)
{
*p1=*p2;
}
*p1='\0';
}
样例
#include<stdio.h>
void my_strcpy(char *p1,char *p2)
{
for(;*p2!='\0';p1++,p2++)
{
*p1=*p2;
}
*p1='\0';
}
int main()
{
char s1[1000],s2[1000],*p1=s1,*p2=s2;
gets(s1);
gets(s2);
my_strcpy(p1,p2);
printf("%s",s1);
return 0;
}
/*
样例一
输入
hello!
hi
输出
hi
*/
4,strcat
用来连接字符串
void strcat(char *p1,char *p2)
{
int len;
len=strlen(p1);
p1=p1+len;
for(;*p2!='\0';p1++,p2++)
{
*p1=*p2;
}
p1='\0';
}
样例(存在部分是可以正确执行部分不能正确执行的问题)
#include<stdio.h>
#include<string.h>
void strcat(char *p1,char *p2)
{
int len;
len=strlen(p1);
p1=p1+len;
for(;*p2!='\0';p1++,p2++)
{
*p1=*p2;
}
p1='\0';
}
int main()
{
char s1[1000],s2[1000],*p1=s1,*p2=s2;
gets(s1);
gets(s2);
strcat(p1,p2);
printf("%s",s1);
return 0;
}
/*
样例一
输入
hello!
hi
输出
hello!hi?b
样例二
输入
hello
hi
输出
hellohi
*/
正确实现
void my_strcpy(char *p, char *q)
{
while (*p!='\0')
p++;
while (*p++ = *q++);
}
样例
#include<stdio.h>
void my_strcpy(char *p, char *q)
{
while (*p!='\0')
p++;
while (*p++ = *q++);
}
int main()
{
char s1[100];
char s2[100];
gets(s1);
gets(s2);
my_strcpy(s1,s2);
printf("%s",s1);
return 0;
}
/*
样例一
输入
hello!
hi
输出
hello!hi
样例二
输入
hello
hi
输出
hellohi
*/
5,strchr
C语言strchr函数
char *strchr(const char *str, int c)
功能:在参数str所指向的字符串中搜索第一次出现字符c(一个无符号字符)的位置。
返回值:返回一个指向该字符串中第一次出现的字符的指针,如果字符串中不包含该字符则返回NULL空指针。
#include <stdio.h>
#define M 100
char *search(char *, char);
int main(void)
{ char str[M],ch,*p;
printf("请输入一个字符串:");
gets(str);
printf("请输入要查找的字符:");
ch=getchar();
p=search(str,ch);
puts(p);
return 0;
}
char *search(char *s, char c)
{ while(*s)//*s=='\0'结束
{
if(*s==c) return s;
s++;
}
return NULL;
}
结果
请输入一个字符串:hello
请输入要查找的字符:l
llo
6,strstr
char *my_strstr(char *s1, char *s2)
功能:检索字串在字符串中首次出现的位置并返回
返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
举例
#include <stdio.h>
#define M 100
char * my_strstr(char *str1, char *str2)
{
while (str1 != '\0')
{
char *p = str1;
char *q = str2;
char * res = NULL;
if (*p == *q)
{
res = p;
while (*p && *q && *p++ == *q++)
{
;
}
if (*q == '\0')
return res;
}
str1++;
}
return NULL;
}
int main(void)
{ char str[M],ch[M],*p;
printf("请输入一个字符串:");
gets(str);
printf("请输入要查找的字符串:");
gets(ch);
p= my_strstr(str,ch);
puts(p);
return 0;
}
结果
请输入一个字符串:hello world
请输入要查找的字符串:wo
world
7,strncmp
int strncmp(const char *str1, const char *str2, int?n)
与strcmp相似,不过比较范围缩小到前n个字符
int my_strncmp(char s1[],char s2[],int n)
{
int i;
for(i=0;i<n;i++)
{ if(s1[i]>s2[i])
return 1;
if(s1[i]<s2[i])
return -1;
}
return 0;
}
8,strncpy
char *strncpy(char *destinin, char *source, int maxlen)
与strcpy相似,不过比较范围缩小到前n个字符
void my_strcpy(char *p1,char *p2,int n)
{
int i;
for(i=0;i<n;p1++,p2++,i++)
{
*p1=*p2;
}
*p1='\0';
}
|