//--------------------------------------------------------
//date:2015/08/11/20:12
//author: fangchang
//包括读写,复制,连接,比较等函数
//字符串的惯用话(寻找\0的地址 复制 )
//itoa考虑是否为负数,考虑进制(比较烦,8进制的首位是0,16进制是0X)
//----------------------------------------------------------
#ifndef _STRING_DEMO_H
#define _STRING_DEMO_H
#include"stdio.h"
#include<iostream>
using namespace std;
class STRING{
public:
int read_line(char str[], int n) ; //读字符串
char * strcpy(char *str1, const char * str2) ; //复制
char * strcat(char *str1, const char * str2) ; //连接
int strcmp(const char * str1, const char *str2 ) ; //比较
char * itoa(char * str1,int value); //int转成字符串(考虑负数)
void print(char *str) ; //打印
};
int STRING::read_line(char str[], int n) {
int i=0;
while(i<n) {
char ch=getchar();
if( '\n'!= ch ) {
str[i++]=ch;
}
else {
break;
}
}
str[i]='\0';
return i;
}
void STRING::print(char *str) {
printf("string is: %s\n",str);
}
char * STRING::strcpy(char *str1, const char *str2) {
if(NULL==str1 || NULL==str2 ) {
return NULL;
}
char *res = str1;
while( '\0' != (*str1++ = *str2++) ) { //复制的实现原理: 修改指针指向的地址中的值
;
}
return res;
}
char * STRING::strcat(char *str1, const char *str2) {
if(NULL==str1 || NULL==str2) {
return NULL;
}
char *res =str1;
while( '\0' != *str1 ) {
str1++;
}
while( '\0' != (*str1++=*str2++) ) {
;
}
return res;
}
int STRING::strcmp(const char *str1, const char * str2 ) {
if(NULL==str1 || NULL==str2) {
return NULL;
}
while('\0'!=*str1 && '\0' != *str2 && *str1==*str2) {
++str1;
++str2;
}
int res = *str1 - *str2;
if(0 == res) {
return 0;
}
else if(res < 0) {
return -1;
}
else {
return 1;
}
}
char * STRING::itoa(char * str1, int value) {
int tmp;
char flag;
char str[16];
int i=0;
int j=0;
int k=0;
if(value<0) {
tmp=0-value;
flag='-';
}
else {
tmp=value;
}
do{
int number=tmp%10;
char ch = (char)(number + '0');
str[i++]=ch;
tmp=tmp/10;
}while(0 != tmp);
for(j=i-1;j>=0;--j) {
str1[k++]=str[j];
}
str1[k]='\0';
if('-'==flag) {
for(j=k;j>=0;--j) {
str1[j+1]=str1[j];
}
str1[0]=flag;
}
return str1;
}
#endif
#include"stringDemo.h"
#define STR_LEN 80
int main() {
char str[STR_LEN+1];
char str2[STR_LEN+1];
STRING * _string =new STRING;
_string->read_line(str,STR_LEN);
_string->print(str);
cout<<"begin copy: "<<endl;
if(NULL != _string->strcpy(str2,str) ) {
_string->print(str2);
}
if(NULL != _string->strcat(str2,"456") ) {
_string->print(str2);
}
cout<<_string->strcmp("a","b")<<endl;
int num=-123121;
char str3[16];
_string->print(_string->itoa(str3,num));
system("pause");
return 1;
}