实现字符串操作常用的库函数的功能
strlen strcpy strncpy1 strcat strncat strchr trrchr
/*task1.c*/
#include "_public.h"
int main(){
char str[50];
memset(str,0,sizeof(str));
char str1[50];
memset(str1,0,sizeof(str1));
strcpy1(str,"asdadsfbgedwasfghfds");// 实现strcpy函数的功能
printf("strlen1(str):%lu\n",strlen1(str));// 实现strlen函数的功能
// strcpy(str,"asdadsfbgedwasfghfds");
printf("strlen(str):%lu\n",strlen(str));
// 实现strncpy函数的功能,下同。
strncpy1(str,"123456fbgedwasfghfds",6);// 实现strncpy函数的功能
printf("str复制前6个字符:%s\n",str);// 实现strlen函数的功能
strncpy1(str,"123456fbgedwasfghfds",40);// 实现strncpy函数的功能
printf("str复制前6个字符:%s\n",str);// 实现strlen函数的功能
// 实现strcat函数的功能
strcpy1(str,"asdfsgdsdf");
strcpy1(str1,"1234");
printf("在“asdfsgdsdf后接上”1234“:%s\n",strcat1(str, str1));
strcpy1(str,"asdfsgdsdf");
printf("在“asdfsgdsdf后接上”1234“:%s\n",strcat(str, str1));
// 实现strncat函数的功能
strcpy1(str,"asdfsgdsdf");
strcpy1(str1,"12345");
printf("strncat1在“asdfsgdsdf后接上”12345“前3个:%s\n",strncat1(str, str1,3));
strcpy1(str,"asdfsgdsdf");
printf("strncat在“asdfsgdsdf后接上”12345“前3个:%s\n",strncat1(str, str1,3));
strcpy1(str,"asdfsgdsdf");
printf("strncat1在“asdfsgdsdf后接上”12345“前8个:%s\n",strncat1(str, str1,8));
strcpy1(str,"asdfsgdsdf");
printf("strncat在“asdfsgdsdf后接上”12345“前8个:%s\n",strncat1(str, str1,8));
// 实现strchr函数的功能
printf("strchar1返回“%s”中第一次出现‘d’的地址:%p\n",str,strchr1(str, 'd'));
printf("strchar返回“%s”中第一次出现‘d’的地址:%p\n",str,strchr(str, 'd'));
// 实现strncpy函数的功能
char *strrchr1(const char *s, const int c);
printf("strchar1返回“%s”中最后一次出现‘d’的地址:%p\n",str,strrchr1(str, 'd'));
printf("strchar返回“%s”中最后一次出现‘d’的地址:%p\n",str,strrchr(str, 'd'));
/*************难度up***************/
printf("strstr返回“%s”中第一次出 现‘dfs’的地址:%p\n",str,strstr(str, "dfs"));
printf("strstr1返回“%s”中第一次出现‘dfs’的地址:%p\n",str,strstr1(str, "dfs"));
printf("strstr2返回“%s”中第一次出 现‘dfs’的地址:%p\n",str,strstr2(str, "dfs"));
printf("strstr返回“%s”中第一次出现‘daa’的地址:%p\n",str,strstr(str, "daa"));
printf("strstr1返回“%s”中第一次出 现‘daa’的地址:%p\n",str,strstr1(str, "daa"));
printf("strstr2返回“%s”中第一次出现‘daa’的地址:%p\n",str,strstr2(str, "daa"));
printf("strcmp1比较“%s”与“%s”,返回值为:%d\n",str,str1,strcmp1(str, str1));
printf("strcmp比较“%s”与“%s”,返回值为:%d\n",str,str1,strcmp(str, str1));
printf("strcmp1比较“%s”与“%s”,返回值为:%d\n",str,str,strcmp1(str, str));
printf("strcmp比较“%s”与“%s”,返回值为:%d\n",str,str,strcmp(str, str));
printf("strncmp1比较“%s”与“%s”,返回值为:%d\n",str,str1,strncmp1(str, str1,3));
printf("strncmp比较“%s”与“%s”,返回值为:%d\n",str,str1,strncmp(str, str1,3));
printf("strncmp1比较“%s”与“%s”,返回值为:%d\n",str,str,strncmp1(str, str,3));
printf("strncmp比较“%s”与“%s”,返回值为:%d\n",str,str,strncmp(str, str,3));
}
/*public.c*/
#include "_public.h"
//min函数的实现
size_t min(const size_t x, const size_t y){
if (x<y) return x;
return y;
}
// 实现strlen函数的功能。
size_t strlen1( const char* str){
size_t longth=0;
while (str[longth]) longth++;
return longth;
}
// 实现strcpy函数的功能
char *strcpy1(char* dest, const char* src){
int i=0;
while (src[i])
{
dest[i]=src[i];
i++;
}
dest[i]=0;
return dest;
}
// 实现strncpy函数的功能,下同。
char *strncpy1(char* dest, const char* src,size_t n){
int i=0;
for(i=0;i<n;i++) dest[i]=src[i];
return dest;
}
// 实现strcpy函数的功能
char *strcat1(char* dest, const char* src){
size_t longth=0 ,n = 0;
longth = strlen1(dest);
while (src[n])
{
dest[longth]=src[n];
longth++;
n++;
}
dest[longth]=0;
return dest;
}
// 实现strncat函数的功能
char *strncat1 (char* dest, const char* src,size_t n){
size_t longth=0 ,i = 0;
longth = strlen1(dest);
for(i = 0;i<n;i++)
{
dest[longth]=src[i];
longth++;
}
dest[longth]=0;
return dest;
}
// 实现strchr函数的功能
char *strchr1(const char *s, const int c){
size_t longth=0;
size_t i=0;
longth = strlen1(s);
for(i=0;i<longth-1;i++){
if(s[i]==c) return (char *)s+i;
}
return 0;
}
// 实现strrchr函数的功能
char *strrchr1(const char *s, const int c){
size_t longth=0;
size_t i=0;
longth = strlen1(s);
for(i=longth-1;i>=0;i--){
if(s[i]==c) return (char *)s+i;
}
return 0;
}
/*************难度up***************/
// 实现strstr1函数的功能
char *strstr1(const char* str, const char* substr){
size_t longth=0,longth1;
size_t i=0,j=0,n=0;
longth = strlen1(str);
longth1 = strlen1(substr);
for(i=0;i<longth;i++){
if(str[i]==substr[0]){
n=i;
for(j=0;j<longth1;j++){
//printf("%zu\n",n);
if (str[n]==substr[j]){
n++;
continue;
}
break;
}
if(j == longth1) return (char *)str+i;
}
}
return 0;
}
char *strstr2(const char* str, const char* substr){
char* pos=(char*)str;
char* pos1=0;
while (pos[0])
{
if(strchr(pos,substr[0])==0) return 0;
if(strncmp(pos,substr,strlen(substr))==0) return (char*)pos;
pos++;
}
return 0;
}
// 实现strcmp1函数的功能
int strcmp1( const char *str1, const char *str2 ){
size_t longth1 = strlen(str1);
size_t longth2 = strlen(str2);
size_t n = min(longth1,longth2);
int i=0;
// for(i=0;i<n;i++){
// if (str1[i]>str2[i]) return 1;
// else if(str1[i] < str2[i]) return -1;
// }
// if (longth1==longth2) return 0;
// else if(longth1 > longth2) return 1;
// return -1;
for(i=0;i<n;i++){
if(str1[i]==str2[i]) continue;
break;
}
// printf("i = %d \n",i);
if ((longth1==longth2)&&(str1[i]==str2[i])) return 0;
if(str1[i]>str2[i]) return 1;
return -1;
}
// 实现strncmp1函数的功能
int strncmp1(const char *str1, const char *str2, const size_t n){
size_t longth1 = strlen(str1);
size_t longth2 = strlen(str2);
int i=0;
for(i=0;i<n;i++){
if (str1[i]>str2[i]) return 1;
else if(str1[i]>str2[i]) return -1;
//else return 0;
}
return 0;
}
//task2.c的函数 第二个参数destsize是第一个参数dest占用内存的字节数
char *STRCPY(char* dest,const size_t destsize,const char* src){
size_t n=0,i=0;
for(i=0;(i<destsize-1)&&(src[i]!=0);i++) dest[i]=src[i];
dest[i]=0;
return dest;
}
//****************
char *STRCPY2(char* dest,const size_t destsize,const char* src){
size_t n=0,i=0;
for(i=0;(i<destsize-1)&&(src[i]!=0);i++) dest[i]=src[i];
dest[i]=0;
return dest;
}
char *STRNCPY(char* dest,const size_t destsize,const char* src,size_t n){
size_t i=0;
for(i=0;(i<destsize-1)&&(src[i]!=0)&&i<n;i++) dest[i]=src[i];
dest[i]=0;
return dest;
}
char *STRCAT(char* dest,const size_t destsize,const char* src){
size_t i=0,x=0;
for(i=strlen(dest),x=0;(i<destsize-1)&&(src[x]!=0);i++,x++) dest[i]=src[x];
return dest;
}
char *STRNCAT(char* dest,const size_t destsize,const char* src,size_t n){
size_t i=0,x=0;
for(i=strlen(dest),x=0;(i<destsize-1)&&(src[x]!=0)&&x<n;i++,x++) dest[i]=src[x];
return dest;
}
/*********************************task3.c的函数定义***********************************/
// 删除字符串左边指定的字符
void DeleteLChar(char *str,const char in_char){
size_t i=0;
for(i=0;i<strlen(str);i++){
if (str[i] == in_char) break;
}
//if(i==strnlen) retur
for(;i<strlen(str);i++) str[i]=str[i+1];
}
// 删除字符串右边指定的字符
void DeleteRChar(char *str,const char in_char){
size_t i=0;
for(i=strlen(str)-1;i>0;i--){
if (str[i] == in_char) break;
}
//if(i==strnlen) retur
for(;i<strlen(str);i++) str[i]=str[i+1];
}
// 删除字符串两边指定的字符
void DeleteLRChar(char *str,const char in_char);
// 删除字符串中间的字符串
void DeleteMStr(char *str,const char *in_str);
// 在字符串的左边补字符到指定长度
void LPad(char *str,const char in_char,unsigned int in_len);
// 在字符串的右边补字符到指定长度
void RPad(char *str,const char in_char,unsigned int in_len);
// 把小写转换成大写,忽略不是字母的字符
void ToUpper(char *str){
size_t n=0;
n=strlen(str);
for(int i=0;i<n;i++){
if(str[i]<='z'&&str[i]>='a') str[i]-=('a'-'A');
}
}
// 把大写转换成小写,忽略不是字母的字符
void ToLower(char *str){
size_t n=0;
n=strlen(str);
for(int i=0;i<n;i++){
if(str[i]<='Z'&&str[i]>='A') str[i]+=('a'-'A');
}
}
// 判断内容是否全部是数字,0-是,-1-不是。
int IsDigit(const char *str){
size_t n=0;
n=strlen(str);
for(int i=0;i<n;i++){
if(!(str[i]<='9'&&str[i]>='0')) return -1;
}
return 0;
}
// 判断内容是否全部是大写字母,0-是,-1-不是。
int IsUpper(const char *str){
size_t n=0;
n=strlen(str);
for(int i=0;i<n;i++){
if(!(str[i]<='Z'&&str[i]>='A')) return -1;
}
return 0;
}
// 判断内容是否全部是小写字母,0-是,-1-不是。
int IsLower(const char *str){
size_t n=0;
n=strlen(str);
for(int i=0;i<n;i++){
if(!(str[i]<='z'&&str[i]>='a')) return -1;
}
return 0;
}
// 判断内容是否全部是ASCII字符,0-是,-1-不是。
int IsASCII(const char *str){
size_t n=0;
n=strlen(str);
for(int i=0;i<n;i++){
if(!(str[i]<=127&&str[i]>=0)) return -1;
}
return 0;
}
/*public.h*/
#include<stdio.h>
#include<string.h>
//min函数的实现
size_t min(const size_t x, const size_t y);
size_t strlen1( const char* str); // 实现strlen函数的功能。
char *strcpy1(char* dest, const char* src); // 实现strcpy函数的功能,下同。
char *strncpy1(char* dest, const char* src,size_t n);
char *strcat1(char* dest, const char* src);
char *strncat1 (char* dest, const char* src,size_t n);
char *strchr1(const char *s, const int c);
char *strrchr1(const char *s, const int c);
/*************难度up***************/
char *strstr1(const char* str, const char* substr); // 实现strstr1函数的功能,下同。
char *strstr2(const char* str, const char* substr);
int strcmp1( const char *str1, const char *str2 );
int strncmp1(const char *str1, const char *str2, const size_t n);
/*************task2.c的函数定义***************/
char *STRCPY(char* dest,const size_t destsize,const char* src);
char *STRNCPY(char* dest,const size_t destsize,const char* src,size_t n);
char *STRCAT(char* dest,const size_t destsize,const char* src);
char *STRNCAT(char* dest,const size_t destsize,const char* src,size_t n);
/*********************************task3.c的函数定义***********************************/
// 删除字符串左边指定的字符
void DeleteLChar(char *str,const char in_char);
// 删除字符串右边指定的字符
void DeleteRChar(char *str,const char in_char);
// 删除字符串两边指定的字符
void DeleteLRChar(char *str,const char in_char);
// 删除字符串中间的字符串
void DeleteMStr(char *str,const char *in_str);
// 在字符串的左边补字符到指定长度
void LPad(char *str,const char in_char,unsigned int in_len);
// 在字符串的右边补字符到指定长度
void RPad(char *str,const char in_char,unsigned int in_len);
// 把小写转换成大写,忽略不是字母的字符
void ToUpper(char *str);
// 把大写转换成小写,忽略不是字母的字符
void ToLower(char *str);
// 判断内容是否全部是数字,0-是,-1-不是。
int IsDigit(const char *str);
// 判断内容是否全部是大写字母,0-是,-1-不是。
int IsUpper(const char *str);
// 判断内容是否全部是小写字母,0-是,-1-不是。
int IsLower(const char *str);
// 判断内容是否全部是ASCII字符,0-是,-1-不是。
int IsASCII(const char *str);