字符串操作
字符串相关函数:
-
putchar:
- int getchar(int c);
- 向标准输出写一个字符
- 返回写了几个字符,EOF(-1)表示写失败
-
getchar:
- int getchar(void);
- 从标准输入读入一个字符
- 返回类型是int是为了返回EOF(-1)
-
scanf
-
printf
使用前记得#include <string.h>
-
strlen:
- int strlen(const char *s);
- 返回s字符串长度(不包括结尾的0)
int mylen(const char *s)//定义const是因为不想在函数里面改变数组
{
int index=0;
while(s[index]!='\0'){
index++;
}
return index;
}
-
strcmp
- int strcmp(const char *s1,const char *s2);
- 比较两个字符串,返回0表示两个数组长度相等,-多少表示在不相等那个位数s1比s2小多少,+多少表示在不相等那个位数s1比s2大多少
int mycmp(const char *s1,const char *s2)//当作数组处理
{
int index=0;
while(s1[index]==s2[index]&&s1[index]!='\0'){
//if(s1[index]!=s2[index]){
//break;
//}else if(s1[index]='\0'){
//break;
//}
index++;
}
return s1[index]-s2[index];
}
int mycmp(const char *s1,const char *s2)//当作指针处理
{
while(*s1==*s2&&*S1!='\0'){
s1++;
s2++;
}
return *s1-*s2;
}
-
strcpy
- char *strcpy(char *restrict dst,const char *restrict src);
- 把src的字符串拷贝到dst
- restrict表示src和dst不重叠(多线程将任务划分所以不能重叠否则会产生严重后果)
- 返回的是dst的地址
char *mycpy(char *dst,const char *src)//当作数组处理
{
int index=0;
while(src[index]){
dst[index]=src[index];
index++;
}
dst[index]='\0';
return dst;
}
char *mycpy(char *dst,const char *src)//当作指针处理
{
char *ret=dst;
while(*dst++=*src++);
*dst='\0';
return ret;
}
-
strchr&&strrchr(字符串中找字符)
- char *strchr(const char *s,int c);(返回c后面的字符串(从左到右))
- char *strrchr(const char *s,int c);(返回c后面的字符串(从右到左))
- 返回的是字符所在的地址
- 返回NULL表示没有找到
int main()
{
char a[]="hello";
char *p=strchr(a,'l');
p=strchr(p+1,'l');
printf("%s\n",p);//输出‘lo’(即找到第二个l之后的字符串)
return 0;
}
int main()
{
char a[]="hello";
char *p=strchr(a,'l');
char c=*p;
*p='\0';
char *t=(char *)malloc(strlen(a)+1);
strcpy(t,a);
printf("%s\n",t);//输出‘he’(即找到第一个l之前的字符串)
*p=c;
free(t);
return 0;
}
- strstr&&strcasestr(字符串中找字符串)