/*
实现字符串的strcpy,strcmt,strcmp,itoa,atoi函数
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void FStrcpy(char *,char *);
void FStrncpy(char *,char *,size_t );
void FStrcmt(char *,char *);
void FStrncmt(char *,char *,size_t );
int FStrcmp(const char *,const char *);
int FStrncmp(const char *,const char *,size_t size);
int FAtoi(const char *);
void FItoa(int ,char*);
void FFFF(int value ,char * str);
int main()
{
//char *str1="jdfhjsdjs";
//char *str2="jdaa";
//char *s=(char *)malloc(50);
//char str3[]="jdhuuoeurh";
// FStrcpy(s,str1);
FStrncpy(s,str2,4);
//FStrcmt(s,str2);
//FStrncmt(s,str1,2);
//printf("%s\n",s);
//printf("%d\n", FStrcmp(str1,str2));
// printf("%d\n", FStrncmp(str1,str2,3));
char *str=(char *)malloc(50);
//int i=atoi(" 123345 ");
//printf("%d\n",FAtoi(" -454865 111"));
// _itoa_s(-124568,str,50,10);
// FItoa(-123,str);
FFFF(-1564,str);
return 0;
}
void FStrcpy(char *des,char *str)//将str字符串copy到des字符串
{
while(*str!=0)
{
*des++=*str++;
}
*des=0;//以\0结尾的才是字符串
}
void FStrncpy(char *des,char *str,size_t size)//将str字符串的前size个字符copy 到des字符串中
{
while(*str!=0&&size>0)
{
size--;
*des++=*str++;
}
*des=0;
}
void FStrcmt(char *des,char *str)//将str字符串连接到des字符串之后
{
while(*des!=0)//遍历到des字符串的最后一个元素位置
{
des++;
}
while(*str!=0)//将str字符串的每一个字符copy到des字符串之后
{
*des++=*str++;
}
*des=0;
}
void FStrncmt(char *des,char *str,size_t size)//将str字符串的前size个字符串连接到des字符串之后
{
while(*des!=0)
{
des++;
}
while(*str!=0&&size>0)
{
size--;
*des++=*str++;
}
*des=0;
}
int FStrcmp(const char *str1,const char *str2)//比较str1和str2两个字符串的大小
{
while(*str1!=0||*str2!=0)//只要有一个字符串比较没有结束时
{
if(*str1>*str2)//比较ascii码的大小
return 1;
if(*str1<*str2)
return -1;
str1++;
str2++;
}
return 0;//两个字符串大小长度相同时,返回0
}
int FStrncmp(const char *str1,const char *str2,size_t size)
//比较str1和str2两个字符串的前size个字符串的大小
{
while((*str1!=0||*str2!=0)&&size>0)
{
size--;
if(*str1>*str2)
return 1;
if(*str1<*str2)
return -1;
str1++;
str2++;
}
return 0;
}
int FAtoi(const char *str)
//将str字符串(“ -123456 22”)转化为数字,
//去掉第一个数字前面的空格,判断正负符号,取每一个字符变成数字
//结果为-123456
{
int shu=0;
char isZ=1;//默认符号为正,用1表示
//去前空格
while(*str==' ')
{
str++;
}
//判断符号
if(*str=='-'||*str=='+')
{
if(*str=='-')
{
isZ=0;
}
str++;
}
//将字符转化为数字
while(*str>=48&&*str<=57)
{
shu=shu*10+*str-48;//将字符转化为数字
str++;
}
return isZ==1?shu:-shu;//根据符号返回数字,isZ=1返回数字,否则返回负数
}
void FItoa(int value ,char* str)//将数字value转化为一个字符串
{
char isZ=1;//默认符号为正
int w=1;
int length=1;//数字的长度
int jvalue=value;
int t=0;
//判断正负,去掉符号
if(jvalue<0)//将负数变为正数
{
value=jvalue=-jvalue;
*str++='-';
}
//计算位长度
while(jvalue>=10)
{
w*=10;
length++;
jvalue/=10;
}
//取每位上的数,变成字符,存到字符串中
//for(;w>0;w/=10)
//{
//
// *str++=(value/w %10)+48;//数字+48转化为字符
//
// //value=value%w;
//
//}
//*str=0;
str[length--]=0;
while(length>=0)
{
str[length--]=value%10+48;
value/=10;
}
}
void FFFF(int value ,char * str)
{
//判断符号
//char isZ=1;
int w=1;
int length=1;
int jvalue=value;
if(jvalue<0)
{
value=jvalue=-jvalue;
*str++='-';
}
//计算位数,长度
while(jvalue>=10)
{
w=w*10;
length++;
jvalue/=10;
}
for(;w>0;w/=10)//将数字转化为字符,方法1,利用位数转化
{
*str++=value/w%10 +48;
}
*str=0;
//方法2利用数字的长度进行转化
//str[length--]=0;//最后一个元素为0
//while(length>=0)
//{
// str[length--]=value%10+48;
// value/=10;
//}
}