// test18.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "stdio.h" #include "stdlib.h" typedef struct string{ char * ch; int length; }string; void str_assign(string & new_str,const string sour_str){ if(!sour_str.length) return; new_str.length=sour_str.length; if( !(new_str.ch=(char *)malloc(sizeof(char)*new_str.length))) return; for(int i=0;i<sour_str.length;i++) new_str.ch[i]=sour_str.ch[i]; } int str_compare(string str,string str1){ int i=0; for(;i<str.length&&i<str1.length;i++){ if(str.ch[i]>str.ch[i]) return 1; else if(str.ch[i]<str.ch[i]) return -1; } return str.length>str1.length? 1:(str.length<str1.length?-1:0); } void clear_string(string & str){ if(!str.length) return; free(str.ch); str.ch=NULL; str.length=0; } void concat(string str,string str1,string& new_str){ if(!str.length && !str1.length) return; if(!str.length){ str_assign(new_str,str1); return; } if(!str1.length){ str_assign(new_str,str); return; } new_str.length=str.length+str1.length; new_str.ch=(char *)malloc(sizeof(char)*new_str.length); int i=0; for(;i<str.length;i++) new_str.ch[i]=str.ch[i]; for(;i<new_str.length;i++) new_str.ch[i]=str1.ch[i-str.length]; } void get_sub_string(const string sour_string,string & sub_string,int pos,int end){ if(pos>=end||end>sour_string.length) return ; sub_string.length=end-pos+1; sub_string.ch=(char *)malloc(sizeof(char)*sub_string.length); for(int i=pos;i<end;i++) sub_string.ch[i-pos]=sour_string.ch[i]; } void main(int argc, char* argv[]) { string str; str.ch="nihao"; str.length=5; string str1; str1.ch="wohao"; str1.length=5; string new_str; concat(str,str1,new_str); printf("%s",new_str.ch); string sub_string; get_sub_string(new_str,sub_string,2,6); printf("%s",sub_string.ch); }