字串API自定義實作
- 1. 字串基礎API
- 1. puts
- 2. gets
- 3. strlen
- 4. memset
- 2. 字串操作API
- 1. strcpy
- 2. strcmp
- 3. strcat
- 4. strlwr
- 5. strupr
- 6. strchr
- 7. strstr
字串常用API分析請參考:字串常用API
1. 字串基礎API
1. puts
void myputs(char *p)
{
while(*p!='\0') //判斷是否到結尾了
{
putchar(*p++); //逐個列印
}
putchar('\n');
}
2. gets
int mygets(char *str)
{
int cnt=0;
if(str==NULL)
{
printf("記憶體非法");
return 0;
}
while(*str=getchar()) //逐個獲取
{
if(*str=='\n') //回車,獲取結束
return cnt;
else //指標偏移,個數+1
{
cnt++;
str++;
}
}
}
3. strlen
int mystrlen(char *p)
{
int cnt=0;
while(*p++!='\0') //判斷是否到結尾了
cnt++; //長度+1
return cnt;
}
4. memset
void myMemset(char *p,char c,int size)
{
while(size--)
{
*p++=c; //逐個賦值
}
}
2. 字串操作API
1. strcpy
char *myStrcpy(char *des,char *src)
{
if(des==NULL || src==NULL) //判斷是否為空
return NULL;
else
{
while(*src!='\0') //判斷是否到結尾了
{
*des++=*src++; //逐個賦值
}
*des='\0'; //字串結束標志
}
return des;
}
char *mystrncpy(char *des,char *src,int n)
{
if(des==NULL || src==NULL)
return NULL;
else
{
while(*src!='\0'&& n>0)
{
*des++=*src++;
n--;
}
*des='\0';
}
return des;
}
2. strcmp
int myStrcmp(char *s1,char *s2)
{
int ret=0;
while(!(ret=*s1-*s2)&&*s2) //判斷是否相等且某個字串是否為空
{
s1++;
s2++;
}
if(ret<0)
ret=-1;
else if(ret>0)
ret=1;
return(ret);
}
3. strcat
void myStrcat(char *des,char *src)
{
while(*des!='\0') //移到結尾
{
des++;
}
while(*src!='\0') //拼接上去
{
*des++=*src++;
}
*des='\0'; //字串結束標志
}
void myStrncat(char *des,char *src,int n)
{
while(*des!='\0')
{
des++;
}
while(*src!='\0' && n>0)
{
*des++=*src++;
n--;
}
*des='\0';
}
4. strlwr
char *myStrlwr(char *str)
{
if(str==NULL) //判斷是否為空
return NULL;
char *p=str;
while(*p!='\0')
{
if(*p>='A'&&*p<='Z') //判斷是否為大寫
*p=(*p)+0x20; //轉小寫
p++;
}
return str;
}
5. strupr
char *myStrlwr(char *str)
{
if(str==NULL)
return NULL;
char *p=str;
while(*p!='\0')
{
if(*p>='a'&&*p<='z') //判斷是否為小寫
*p=(*p)-0x20; //轉大寫
p++;
}
return str;
}
6. strchr
char *myStrchr(char *str, char c)
{
while(*str!='\0' && *str!=c) //判斷是否結束、是否存在字符c
{
str++;
}
return *str==c? str : NULL; //是否為空
}
7. strstr
char *myStrstr(char *str, char *substr)
{
char *cp=str;
char *s1, *s2;
if (!*substr)
return str;
while(*cp) //是否為空
{
s1 =cp;
s2 =substr;
while (*s1 && *s2 && !(*s1 - *s2)) //是否相等
{
s1++;
s2++;
}
if(!*s2) //找到
return(cp);
cp++;
}
return(NULL);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/259826.html
標籤:其他
上一篇:我的大資料學習之路
