字符串的基本操作

//define the struct of the string


typedef struct {
    char *str;
    int length;
}string;
//initlias the string


bool strassign(string &s, char *chars)
{
    int i,j;
    char *c;
    for (i = 0,c = chars;*c;i++,c++)
        ;
    if (!i)
    {
     s.str = NULL;
         s.length = 0;
    }
    else
    {
     if (!(s.str = (char*)malloc(i*sizeof(char))))
            return false;
        for (j = 0; j < i; j++)
        {
         s.str[j] = chars[j];
        }
        s.length = i;
    }
    return true;
}

//find the sub string


bool substring(string s, string &substring, int pos, int len)
{
    int i;
    if (pos < 0 || pos > s.length - 1 || len < 0 || len > s.length - pos)
        return false;
    if (sub.str)
    {
     free(sub.str);
    }
    if (!len)
    {
     sub.str = NULL;
        sub.length = 0;
    }
    else
    {
     if (!(sub.str = (char*)malloc(sizeof(char)*len)))
            return false;
        for (i = 0; i < len; i++)
        {
         sub.str[i] = s.str[pos + i];
        }
        sub.length = len
    }
    return true;
}

//positioning the substring


bool index(string s, string t, int &pos)
{
    int i,j;
    i = 0;
    j = 0;
    while (i < s.length && j < t.length)
    {
     if (s.str[i] == t.str[i])
        {
         i++;
            j++;
        }
        else
        {
         i = i-j+1;
            j = 0;
        }
    }
    if (j == t.length)
    {
     pos = i - t.length;
        return true;
    }
    else
        return false;
}

//copy the string


bool strcpy(string &s,string t)
{
    int i;
    if (!s.str)
    {
     free(s.str);
    }
    if (!t.length)
    {
     s.str = NULL;
        s.length = 0;
    }
    for (i = 0; i < t.length; i ++)
    {
     s.str[i] = t.str[i];
    }
    s.length = t.length;
    return true;
}

//insert the sub string


bool insert(string &s, string t , int pos)
{
    int i;
    if (pos <0 || pos > s.length)
        return false;
    if (t.str)
    {
     if (!(s.str = (char*)realloc(s.str,(s.length + t.length) * \
                        sizeof(char))))
            return false;
        if (i = s.length; i >= pos; i--)
        {
         t.str[i+t.length] = t.str[i];
        }
        for (i = o; i < t.length; i++)
        {
         s.str[pos+i] = t.str[i];
        }
        s.length = s.length + t.length;
    }
    return true;
}


作者: charming2440   发布时间: 2010-10-15