首页 > 其他 > 详细

串的存储实现

时间:2014-04-06 05:30:06      阅读:484      评论:0      收藏:0      [点我收藏+]
#include<stdio.h>
#include<malloc.h>
#include<string.h>
//串的堆分配存储结构
typedef struct {
    char *ch;
    int length;
}heap;
//串赋值
int str_assign(heap *str, char *chars)
{  
    int count;
    char * c;
    int i;
        //若串str已经存在,则释放所占空间
     printf("%s\n", chars);
//  if (str->ch == NULL)
//      printf("null\n");
//      free(str->ch); /*问题所在,不能释放未知指向的指针所占内存空间,但该怎么办?防止内存泄漏*/
    i = strlen(chars);
    printf("str_assign i:%d\n", i);
    if ( i== 0)
    {
        str->ch = NULL;
        str->length = 0;
    }
    else
    {
        if ( !(str->ch = (char*)malloc(i * sizeof(char))) )
            return -1;
        strcpy(str->ch, chars); //把chars复制到str中去
        str->length = i;
    }
    return 0;
}
//串连接
int str_concat(heap *dest, heap src1, heap src2)
{
    //if(dest->ch)
    //  free(dest->ch);
    if( !(dest->ch = (char*)malloc( (src1.length + src2.length) * sizeof(char) )))
        return -1;
    strcpy(dest->ch, src1.ch);
    strcat(dest->ch, src2.ch);
    dest->length = src1.length + src2.length;
    return 0;
}
//模式匹配
int sub_str(heap s, heap t, int pos)
{
    int i, j;
    i = pos;
    j = 0;
    while(i < s.length && j < t.length)
    {
        if(s.ch[i] == t.ch[j])
        {
            i++;
            j++;
        }
        else{
            i = i - j + 1;
            j = 0;
        }
    }
    if(j >= t.length)
        return (i - t.length);
    return -1;
}
int main()
{
    char * text1 = "fengzhi is trying to do something that never happened.";
    char * text2 = "yeah, I‘ve heard about it.";
    heap str1, str2, str3;
                                                                                
    printf("?1\n");
    str_assign(&str1, text1);
    str_assign(&str2, text2);
                                                                                
    printf("str1:\n");
    puts(str1.ch);
    printf("\n");
                                                                                
    printf("str2:\n");
    puts(str2.ch);
    printf("\n");
                                                                                
    printf("str_concat\n");
    str_concat(&str3, str1, str2);
    printf("str3:\n%s\n", str3.ch);
                                                                                
    printf("index:%d\n", sub_str(str1, str2, 2));
                                                                                
    return 0;
}

   在重新学习的过程中遇到了些问题,比如内存空间的释放,能否释放一个未知指向的指针所占的内存?另外,在<string.h>头文件内包含一些系统函数strcat,strcpy,strstr, strcmp,strlen可以完成串的基本操作,是否真的有必要构造一些函数来完成类似的功能?能够充分利用库函数应该是程序员应具备的素质吧。

   问题有待解决。

串的存储实现,布布扣,bubuko.com

串的存储实现

原文:http://slientradio.blog.51cto.com/7241495/1390982

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!