实现atoi,itoa,strcmp,strcpy,strcat,strlen函数

晨曦之光 发布于 2012/04/13 11:19
阅读 235
收藏 0

#include<iostream>
using namespace std;
void myitoa(const int num,char *ch);
int myatoi(const char *ch);
void mystrcpy(char* dest,const char* source);
int mystrcmp(char *source1,char*source2);
void mystrcat(char *dest,char *source);
int mystrlen(char *ch);
void main()
{
 int a=-123;
 char ch[10];
 myitoa(a,ch);
 cout<<a<<'/t'<<ch<<endl;
 char ch1[]="+123";
 int b;
 b=myatoi(ch1);
 cout<<ch1<<'/t'<<b<<endl;
 char ch_dest[10];
 mystrcpy(ch_dest,ch1);
 cout<<"复制源:"<<ch1<<endl;
 cout<<"复制点:"<<ch_dest<<endl;
 int flag;
 flag=mystrcmp(ch,ch_dest);
 if(flag)
 {
  cout<<"两个字符串不相等"<<endl;
 }
 else
 {
  cout<<"两个字符串相等"<<endl;
 }
 cout<<"mystrcat.........."<<endl;
 mystrcat(ch,"xiesiyuan");
 cout<<ch<<endl;
 cout<<"mystrlen.........."<<endl;
 cout<<mystrlen(ch)<<endl;
}

 


void myitoa(const int num,char *ch)
{
 int temp=num;
 int tag,i(0),j(0);
 char temp_ch[11];
 if(temp<0)
 {
  temp=-temp;
  tag=-1;
 }
 do
 {
  temp_ch[i++]=temp%10+'0';
  temp/=10;
 }while(temp>0);
 i--;
 if(tag==-1)  //负数
 {
  ch[j]='-';
  j++;
 }
 while(i>=0)
 {
  ch[j++]=temp_ch[i--];
 }
 ch[j++]='/0';
}
int myatoi(const char *ch)
{
 int sum(0),i(0),tag;
 while(ch[i]==' '||ch[i]=='/t')  //先消去前面的空格和制表符
 {
  i++;
 }
 if(ch[i]=='-')  //检查是否是负数
 {
  tag=-1;
 }
 if(ch[i]=='-'||ch[i]=='+')  //检查是否有符号
 {
  i++;
 }
 while(ch[i]!='/0')
 {
  sum=ch[i++]-'0'+sum*10;
 }
 if(tag==-1)  //负数
 {
  sum=-sum;
 }
 return sum;
}

 

char* mystrcpy(char* dest,const char* source)
{

 if((dest==NULL)||(source==NULL))

  return 0;

  char *temp=dest;
 while((*dest++=*source++)!='/0');

  return  temp
}

 

 

int mystrcmp(char *source1,char*source2)
{
     char *pt1=source1,*pt2=source2;
     do

     {

          char c1=*pt1++;

          char c2=*pt2++;

          if(c1=='/0'||c2=='/0')

             return c1-c2;

      }while((c1!='/0')&&(c2!='/0');
     return 0;
}

 

 

char* mystrcat(char *dest,char *source)
{

    if((dest==NULL)||(source==NULL))

        return 0;

    char *temp=dest;
    while(*dest++!='/0');
        dest--;
    while((*dest++=*source++)!='/0')
        return temp;
}

 


int mystrlen(char *ch)
{
    int len=0;
    char *temp=ch;

    while(*temp!='/0') 
    {
       len++;
       temp++;
     }
    return len;
}

 

 

需要注意的是:

1、程序的健壮性,检查参数的有效性

2、检查指针的有效性时候,尽量使用dest!=NULL,而不是用!dest这样的形式,隐式转换中char*和bool是相通的

2、检查是否到大结尾,在循环里面while()也用!='/0',另外注意的是边界检查


原文链接:http://blog.csdn.net/xie376450483/article/details/5860261
加载中
返回顶部
顶部