[데이터 구조] 4.1 문자열 의 기본 조작 (코드 추가 실현)

10112 단어 DataStructure
문자열 의 기본 동작 은 다음 과 같 습 니 다.
할당
연결
비교
비 워 주세요.
꼬치
구체 적 인 코드 는 다음 과 같다.
#include 
#include
#include
#include 

typedef struct String{
    char * ch;
    int length;
}Str;

void StrInit(Str &str);//               (str1,str2,str3),       ! 
int StrAssign(Str &str ,char * ch) ;//   
int GetStrLength(Str str);//     
int StrCompare(Str s1,Str s2);//   
int Concat(Str str1, Str str2, Str &str);//   
int GetSubString(Str str,int pos, int len, Str &substr);//    
int ClearString(Str &str); //   

int main(void)
{
    Str str1, str2, str3,substr;
    StrInit(str1);
    StrInit(str2);
    StrInit(str3);
    StrInit(substr);

    char ch1[] = "I love China!";
    char ch2[] = "I love U!";
    char ch3[] = "Data structure!";

    StrAssign(str1, ch1);
    StrAssign(str2, ch2);
    StrAssign(str3, ch3);
    Concat(str1,str2,str3) ;
    GetSubString(str3,3,7,substr);
    printf("%s
"
,str1.ch); printf("%s
"
,str2.ch); printf("%s
"
,str3.ch); printf("%s
"
,substr.ch); return 0; } void StrInit(Str &str) { str.length = 0; str.ch = NULL; } int StrAssign( Str & str ,char * ch) { // if(str.ch) // str.ch , { free(str.ch); str.ch = NULL; } int len = 0; char * c = ch; while (*c) { // ++len; ++c; } if(len == 0) // { str.ch = NULL; str.length = 0; return 1; } else { str.ch = (char *)malloc(sizeof(char)*(len + 1)); if(str.ch ==NULL)// return 0; else {// 1 c = ch; for(int i = 0; i <= len ; ++i,++c) str.ch[i] = *c; str.length = len; return 1; } // {// 2 // i = 0; // c = ch; // while(c*) // { // str.ch[i] = c*; // ++c; // ++i; // } // str.[++i] = '\0'; // str.length = i; // } } } int GetStrLength(Str str) { return str.length; } int StrCompare(Str str1,Str str2) { // for(int i = 0; i if(str1.ch[i] != str2.ch[i]) return str1.ch[i] - str2.ch[i]; return str1.length - str2.length; } int Concat(Str str1, Str str2, Str &str) { // if(str.ch) { free(str.ch); str.ch = NULL; } str.ch = (char *)malloc(sizeof(char)*(str1.length + str2.length + 1)); if(!str.ch) // return 0; int i = 0,j = 0; while (i str.ch[i] = str1.ch[i]; ++i; } while(j < str2.length) { str.ch[i + j] = str2.ch[j]; ++j; } str.ch[i+j] = '\0'; str.length = str1.length + str2.length; return 1; } int GetSubString(Str str,int pos, int len, Str &substr) { // : str pos , len substr if(pos < 0 || pos >=str.length || len < 0 || len > str.length - pos) return 0; if(substr.ch) { free(substr.ch); substr.ch == NULL; } if(len == 0) { substr.ch = NULL; substr.length = 0; return 1; } else { substr.ch = (char*)malloc(sizeof(char) * (len + 1)); int i = pos, j = 0; while(i < pos + len) { substr.ch[j] = str.ch[i]; ++i; ++j; } substr.ch[j] = '\0'; substr.length = len; return 1; } } int ClearString(Str & str) { // if(str.ch) { free(str.ch); str.ch == NULL; } str.length = 0; return 1; }

좋은 웹페이지 즐겨찾기