#include <stdio.h>
#include <tchar.h>
#include <stdlib.h> // TODO: 在此处引用程序需要的其他头文件 struct String{
char* ch;
int length;
}; bool Assign_String(String* str, char* chars);
bool Destroy_String(String* str);
bool Clear_String(String* str);
void Print_String(String str);
bool Insert_String(String* str, String T, int locate);
bool Copy_String(String* str, String T);
int Index_String(String str, String T); //给字符串重新赋值
bool Assign_String(String* str,char* chars){
if (str->ch) free(str->ch);
int i;
char* c;
for (i = , c = chars; *c; c++, i++);//获取字符串长度
if (!i) { str->ch = NULL; str->length = ; return true; }
else{
str->ch = (char*)malloc(i*sizeof(char));
for (int j = ; j < i; j++){
str->ch[j] = chars[j];
}
str->length = i;
return true;
}
}
//销毁字符串
bool Destroy_String(String* str){
if (str)
{
free(str);
str = NULL;
return true;
}
else
return false;
}
//清空字符串
bool Clear_String(String* str){
while (str->length){
str->ch[str->length] = NULL;
str->length--;
}
return true;
}
//打印
void Print_String(String str){
if (str.length)
{
for (int i = ; i < str.length;i++)
{
printf("%c", str.ch[i]); }
printf("\n");
}
}
//在原字符串str的第locate个元素前插入子字符串T
bool Insert_String(String* str, String T, int locate){
if (locate< || locate>str->length) return false;
if (T.length){
if (!(str->ch = (char*)realloc(str->ch,(str->length + T.length)*sizeof(char)))) exit(-);
for (int i = str->length - ; i >= locate; i--)
str->ch[i + T.length] = str->ch[i];
for (int i = ; i < T.length; i++)
str->ch[locate + i] = T.ch[i];
str->length += T.length;
}
return true;
}
//把T的值赋给str
bool Copy_String(String* str, String T){
if (str->ch) free(str->ch);
if (!&T) { str->ch = NULL; str->length = ; return true; }
else{
str->ch = (char*)malloc(T.length*sizeof(char));
for (int i = ; i < T.length; i++){
str->ch[i] = T.ch[i];
}
str->length = T.length;
}
return true;
}
//在原字符串str中搜索子字符串T的位置
//查找失败返回-1
//正常返回index为第一次出现T首字符的位置
int Index_String(String str, String T){
int index = -;
int key = ;
int Hl = ;
if (T.length&&str.length>=T.length){
for (int i = ; i <= str.length - T.length; i++){
if (str.ch[i] == T.ch[key]){
key++;
Hl++;
if (Hl >= T.length) { printf("出来了\n"); index = i - T.length+; return index; }
}
else{
Hl = key = ;
}
printf("i=%d,str是%c,T是%c,核对T的第%d个字符,已满足字符数%d\n", i, str.ch[i], T.ch[key], key, Hl);
}
}
return index;
}

c语言实现基本的数据结构(六) 串的更多相关文章

  1. hdu 3336:Count the string(数据结构,串,KMP算法)

    Count the string Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  2. 数据结构(C语言版)-第4章 串、数组和广义表

    补充:C语言中常用的串运算 调用标准库函数 #include<string.h> 串比较,strcmp(char s1,char s2) 串复制,strcpy(char to,char f ...

  3. 《数据结构与算法分析:C语言描述》复习——第六章“排序”——冒泡排序

    2014.06.17 01:04 简介: 冒泡排序是O(n^2)级别的交换排序算法,原理简单,属于必知必会的基础算法之一. 思路: 排序要进行N轮,每一轮从尾部逐个向前扫描,遇到逆序对就进行交换.确保 ...

  4. Go语言备忘录:基本数据结构

    本文内容是本人对Go语言的变量.常量.数组.切片.映射.结构体的备忘录,记录了关键的相关知识点,以供翻查. 文中如有错误的地方请大家指出,以免误导!转摘本文也请注明出处,多谢! 参考书籍<Go语 ...

  5. R语言入门 :基本数据结构

    1.向量 向量是R语言中最基本的数据类型,在R语言中没有单独的变量. (1)  创建向量 R语言中可以用 = 或者 <- 来赋值. 向量名 <- 向量 或  向量名 = 向量 向量的创建方 ...

  6. C#数据结构之串

    串(string)是n(n>=0)个字符组成的有限序列. 由于串中的字符都是连续存储的,在C#中有恒定不变的特性.一经创建就保持不变. 为了区别C#中的string,因此以stringDS类模拟 ...

  7. 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)

    上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...

  8. 【Java】 大话数据结构(8) 串的模式匹配算法(朴素、KMP、改进算法)

    本文根据<大话数据结构>一书,实现了Java版的串的朴素模式匹配算法.KMP模式匹配算法.KMP模式匹配算法的改进算法. 1.朴素的模式匹配算法 为主串和子串分别定义指针i,j. (1)当 ...

  9. 数据结构(C语言)分享笔记:数据结构的逻辑层次、存储层次

    [1] 严格意义上数据结构的概念 数据结构,一个简单的定义:相互之间存在一种或多种特定关系的数据元素的集合.即:数据结构 = 元素集合 + 元素间关系的集合 . 在讨论数据结构时,可以基于两个不同的层 ...

随机推荐

  1. centos 7 安装docker,conflicts 异常

    [root@localhost html]# yum install docker-io 已加载插件:fastestmirror, langpacks Loading mirror speeds fr ...

  2. Unix及Linux编辑器vi/vim基本使用方法

  3. 剑指offer第二版-3.数组中重复的数

    面试题3:数组中重复的数 题目要求: 在一个长度为n的数组中,所有数字的取值范围都在[0,n-1],但不知道有几个数字重复或重复几次,找出其中任意一个重复的数字. 解法比较: /** * Copyri ...

  4. cogs 2320. [HZOI 2015]聪聪的世界题解

    2320. [HZOI 2015]聪聪的世界 时间限制:6 s   内存限制:512 MB [题目描述] 背景: 聪聪的性取向有问题. 题目描述: 聪聪遇到了一个难题: 给出一个序列a1…an,完成以 ...

  5. 原创:Python编写通讯录,支持模糊查询,利用数据库存储

    1.要求 数据库存储通讯录,要求按姓名/电话号码查询,查询条件只有一个输入入口,自动识别输入的是姓名还是号码,允许模糊查询. 2.实现功能 可通过输入指令进行操作. (1)首先输入“add”,可以对通 ...

  6. 【题解】【合并序列(水题)P1628】

    原题链接 这道题目如果连字符串的基本操作都没学建议不要做. 学了的很简单就可以切,所以感觉没什么难度- 主要讲一下在AC基础上的优化(可能算不上剪枝) 很明显,这道题我们要找的是前缀,那么在字符串数组 ...

  7. css基础5

    今天在这里跟大家分享css基础最核心的部分,浮动和定位.话不多说,直接上干货! 一.浮动 定义:定位元素是相对于其正常位置应该出现的位置.定位元素的位置是相对于自身.父级元素位置.其他元素以及浏览器窗 ...

  8. Vue杂谈

    <div id="app"> <input type="text" ref="input1"/> <butto ...

  9. xx.exe 中的 0x014180bd 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突(当指针访问异常时,应考虑是不是对象未创建)。

    xx.exe 中的 0x014180bd 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突

  10. c++中利用宏定义简化for循环使用

    话不多说,上方法 #define _for(i,a,b) for( int i=(a); i<(b); ++i) #define _rep(i,a,b) for( int i=(a); i< ...