1. 程式人生 > >資料結構串的基本操作--賦值,列印,連線

資料結構串的基本操作--賦值,列印,連線

//#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<string.h>
using namespace std;
struct String
{
    char *ch;
    int length;
};
typedef String* Str;

bool Assgin_string(Str &s, char *chars);
void PrintStr(Str s);
void ConcatStr(Str s,Str str1);

bool Assgin_string(Str &s, char *chars)
{
    s=(String*)malloc(sizeof(String));
    if (s->ch) free(s->ch);
    int len=0;
    char *c=chars;
    //cout<<c;
    while(*c)
    {
        ++len;
        ++c;
    }
    //cout<<"..."<<len<<chars<<"..."<<endl;
    if(len==0)
    {
        s->ch=NULL;
        s->length=0;
        return false;
    }
    else
    {
        s->ch=(char*)malloc((len+1)*sizeof(char));///cout<<"NULL";
            for(int i=0;i<len;i++)
            {
                s->ch[i]=chars[i];
                 //cout<<c[i]<<endl;
            }
            s->length=len;
            return true;
    }
    return false;
}


void PrintStr(Str str)
{
   if (str->length)
    {
        for (int i = 0; i < str->length;i++)
        {
            printf("%c", str->ch[i]);
        }
        printf("\n");
    }
}


void ConcatStr(Str s,Str str1)
{
    int len=s->length+str1->length+1;
    /*if(s->ch)
        free(s->ch);*/
    Str tmp=(String*)malloc(sizeof(String));
    tmp->ch=s->ch;

    s->ch=(char*)malloc(sizeof(char)*len);
        for(int i=0;i<s->length;i++)
        {
            s->ch[i]=tmp->ch[i];
        }
        for(int i=s->length;i<len-1;i++)
        {
            s->ch[i]=str1->ch[i-s->length];
        }
        s->length=len;
    printf("新增完成\n");
}


int main()
{
    Str s;
    char * c="aaa";
    Assgin_string(s,c);
    PrintStr(s);
    //free(c);
    Str news;
    char * cc="aaacc";
    Assgin_string(news,cc);
    ConcatStr(news,s);
    PrintStr(news);
	return 0;
}




僅供自己學習記錄