自定义字符串处理函数,函数原型如下:
- 求字符串的长度:int udf_strlen(char s[]);
- 两个字符串拼接(将字符串t拼接到字符串s之后):void udf_strcat(char s[],char t[]);
- 字符串拷贝(将字符串t拷贝到字符串s中):void udf_strcpy(char s[],char t[]);
- 字符串比较大小(相等返回0,小于返回-1,大于返回1):int udf_strcmp(char s[],char t[]);
- 求字符串的子串(求字符串s中从指定位置startpos开始截取长度为length的子串,存入字符数组t中并返回):void udf_substr(char s[],char t[],int startpos,int length);
#include<stdio.h>
int udf_strlen(char s[]);
void udf_strcat(char s[],char t[]);
void udf_strcpy(char s[],char t[]);
int udf_strcmp(char s[],char t[]);
void udf_substr(char s[],char t[],int idx1,int idx2);//此处没有按照题目的设置,采用起始下标和结束下标截出字串
int udf_strlen(char s[])
{
int i;
for(i=0;s[i]!='\0';i++);
return i;
}
//将字符串t拼接到字符串s之后
//s长度不够时会导致越界!
void udf_strcat(char s[],char t[])
{
for(;*s!='\0';s++);
do
{
*(s++)=*(t++);//同时实现赋值和移动指针
}while(*(t-1)!='\0');
}
//将字符串t拷贝到字符串s中
void udf_strcpy(char s[],char t[])
{
do
{
*(s++)=*(t++);//同时实现赋值和移动指针
}while(*(t-1)!='\0');
}
//相等返回0,s小于t返回-1,s大于t返回1
int udf_strcmp(char s[],char t[])
{
int ret;
do
{
ret=*s-*t;
}while(!ret&&*(s++)!='\0'&&*(t++)!='\0');//循环继续的条件:之前比较的两个元素相同且字符串没有结束,同时实现移动指针
if(ret>0)return 1;
else if(ret<0)return -1;
else if(ret=0)return 0;
}
//idx1 和 idx2 分别是开始和结束元素的下标
void udf_substr(char s[],char t[],int idx1,int idx2)
{
int i,j;
for(i=idx1,j=0;i<=idx2;i++,j++)
{
t[j]=s[i];
}
t[j+1]='\0';
}
int main()
{
char a[7]={"d125"};
char b[6]={"d155"};
char t[10];
udf_substr(a,t,0,0);
// printf("%d",udf_strcmp(a,b));
// udf_strcat(b,a);
// udf_strcpy(b,a);
// printf("%s",b);
// printf("%d",b[3]);
// printf("%d",a[3]);
return 0;
}