1. #include<stdio.h>
  2.  
  3. int strLength(char* s)//求字符长度
  4. {
  5. int i=;
  6. while(s[i]!=NULL)
  7. {
  8. i++;
  9. }
  10. return i;
  11. }
  12.  
  13. int* getNext(char* p)
  14. {
  15. int length=strLength(p);
  16. int* next=(int *)calloc(length,sizeof(int));
  17. next[] = -;
  18. int j = ;
  19. int k = -;
  20. while (j < length - )
  21. {
  22. if (k == - || p[j] == p[k])
  23. {
  24. if (p[++j] == p[++k])
  25. { // 当两个字符相等时要跳过
  26.  
  27. next[j] = next[k];
  28. }
  29. else
  30. {
  31. next[j] = k;
  32. }
  33. }
  34. else
  35. {
  36. k = next[k];
  37. }
  38. }
  39. return next;
  40. }
  41.  
  42. int KMP(char* t,char* p)
  43. {
  44. int i = ; // 主串的位置
  45. int j = ; // 模式串的位置
  46. int lengtht=strLength(t);
  47. int lengthp=strLength(p);
  48. int *next=getNext(p);
  49.  
  50. while (i < lengtht && j < lengthp)
  51. {
  52. if (j == - || t[i] == p[j])
  53. { // 当j为-1时,要移动的是i,当然j也要归0
  54. i++;
  55. j++;
  56. }
  57. else
  58. {
  59. // i不需要回溯了
  60. // i = i - j + 1;
  61. j = next[j]; // j回到指定位置
  62. }
  63. }
  64.  
  65. if (j == lengthp)
  66. {
  67. return i - j;
  68. }
  69. else
  70. {
  71. return -;
  72. }
  73. }
  74.  
  75. void strCopy(char *des,char *src)//字符串拷贝
  76. {
  77. int i=;
  78. while(src[i]!=NULL)
  79. {
  80. des[i]=src[i];
  81. i++;
  82. }
  83. }
  84.  
  85. void destroyStr(char *des)//字符串删除
  86. {
  87. free(des);
  88. }
  89.  
  90. bool strEmpty(char *des)//判断字符串是否为空
  91. {
  92. if(des[]==NULL)
  93. {
  94. return true;
  95. }
  96. else
  97. {
  98. return false;
  99. }
  100. }
  101.  
  102. int strCompare(char *s1,char *s2)//字符串比较
  103. {
  104. int flag;
  105. for(int i=;;i++)
  106. {
  107. if(s1[i]==NULL&&s2[i]!=NULL)
  108. {
  109. flag=-;
  110. break;
  111. }
  112. else if(s1[i]!=NULL&&s2[i]==NULL)
  113. {
  114. flag=;
  115. break;
  116. }
  117. else if(s1[i]==NULL&&s2[i]==NULL)
  118. {
  119. flag=;
  120. break;
  121. }
  122. }
  123. return flag;
  124. }
  125.  
  126. char* strConcat(char* s1,char* s2)//字符串连接函数
  127. {
  128. int length1,length2;
  129. length1=strLength(s1);
  130. length2=strLength(s2);
  131. char *s=(char *)malloc(sizeof(char)*(length1+length2));
  132. int i=;
  133. while(s1[i]!=NULL)
  134. {
  135. s[i]=s1[i];
  136. i++;
  137. }
  138. int j=;
  139. while(s2[j]!=NULL)
  140. {
  141. s[i]=s2[j];
  142. i++;
  143. j++;
  144. }
  145. return s;
  146. }
  147.  
  148. char* strSub(char* s,int pos,int length)//将str串从pos位置开始复制到subStr中
  149. {
  150. char *sub=(char *)malloc(sizeof(char)*length);//建议此处将malloc函数改为calloc函数;calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。
  151. int i=pos;
  152. int count=;
  153. while(count<=length)
  154. {
  155. sub[count]=s[i];
  156. i++;
  157. count++;
  158. }
  159. return sub;
  160. }
  161.  
  162. char* strReplace(char* s,char* sub,char* replaceStr)//字符串替换
  163. {
  164. int end;
  165. char* temp1;
  166. char* temp2;
  167. int begin=;
  168. int subLength=strlen(sub);
  169. end=KMP(s,sub);
  170. while(end!=-)
  171. {
  172. temp1=strSub(s,begin,end-begin);
  173. temp2=strSub(s,end+subLength,strlen(s)-(end+subLength));
  174. s=strcat(temp1,replaceStr);
  175. s=strcat(s,temp2);
  176. end=KMP(s,sub);
  177. }
  178. return s;
  179. }

不利用C语言库函数,实现字符串相关函数的更多相关文章

  1. C语言复习:字符串和一级指针

    字符串基本操作 字符数组初始化方法 int main() {     //1 {}号法 初始化列表     //数组初始化有2种方法 默认元素个数.指定元素个数     char buf1[] = { ...

  2. C语言处理json字符串

    JSON语法说明 先来看一个简单的JSON 1 { 2 "stars": [ 3 { 4 "name": "Faye", 5 "a ...

  3. C语言库函数大全及应用实例十四

    原文:C语言库函数大全及应用实例十四                                       [编程资料]C语言库函数大全及应用实例十四 函数名: strset 功 能: 将一个串 ...

  4. C语言库函数大全及应用实例十三

    原文:C语言库函数大全及应用实例十三                                          [编程资料]C语言库函数大全及应用实例十三 函数名: stat 功 能: 读取打 ...

  5. C语言库函数大全及应用实例十二

    原文:C语言库函数大全及应用实例十二                                          [编程资料]C语言库函数大全及应用实例十二 函数名: setrgbpalette ...

  6. C语言库函数大全及应用实例九

    原文:C语言库函数大全及应用实例九                                                [编程资料]C语言库函数大全及应用实例九 函数名: mktemp 功 ...

  7. C语言库函数大全及应用实例八

    原文:C语言库函数大全及应用实例八                                            [编程资料]C语言库函数大全及应用实例八 函数名: kbhit 功 能: 检查 ...

  8. C语言库函数大全及应用实例五

    原文:C语言库函数大全及应用实例五                                                 [编程资料]C语言库函数大全及应用实例五 函数名: getcurdi ...

  9. C语言库函数大全及应用实例六

    原文:C语言库函数大全及应用实例六                                              [编程资料]C语言库函数大全及应用实例六 函数名: getlinesett ...

随机推荐

  1. linux压缩与解压(持续更新)

    压缩 tar cvzf  w.tar.gz  xxx1 xxx2  对应解压:tar xvzf w.tar.gz

  2. Modbus库开发笔记之二:Modbus消息帧的生成

    前面我们已经对Modbus的基本事务作了说明,也据此设计了我们将要实现的主从站的操作流程.这其中与Modbus直接相关的就是Modbus消息帧的生成.Modbus消息帧也是实现Modbus通讯协议的根 ...

  3. restricted 模式及其 使用

    什么是数据库的RESTRICTED 模式 注:以下内容来至:百度知道 --数据库受限模式,在这个模式下只有RESTRICTED SESSION 权限的人才可以登陆,一般用与数据库维护的时候使用. RE ...

  4. Confluence 6 使用 WebDAV 客户端来对页面进行操作

    下面的部分告诉你如何在不同的系统中来设置原生的 WebDAV 客户端,这个客户端通常显示在你操作系统的文件浏览器中,例如,Windows 的 Windows Explorer 或者 Linux 的 K ...

  5. Confluence 6 PostgreSQL 测试你的数据库连接

    在你的数据库设置界面,有一个 测试连接(Test connection)按钮可以检查: Confluence 可以连接你的数据库服务器 数据库字符集的编码是否设置正确 你的数据库用户是否有正确的权限可 ...

  6. 【Java】「深入理解Java虚拟机」学习笔记(4)- 类文件结构

    我为什么喜欢Java,另一个重要原因就是跨平台,WORA. 程序员是爽了,但肯定有人要为你遮风挡雨,解决WORA的基石就是字节码+虚拟机. ♣Tip 其实这里存在两种无关性,一是平台无关性.另一个是语 ...

  7. jQuery File Upload的使用

    jQuery File Upload 是一个Jquery文件上传组件,支持多文件上传.取消.删除,上传前缩略图预览.列表显示图片大小,支持上传进度条显示等,以下就介绍一下该插件的简单使用 1.需要加载 ...

  8. python http请求类

    # -*- coding: UTF-8 -*- # coding="utf-8" import httplib2 import json from urllib.parse imp ...

  9. python面向对象三大特性之封装

    一. 概述 定义:隐藏对象的属性和实现细节,仅对外提供公共访问方式 封装的原则:把不需要对外提供的内容都隐藏起来,提供公共的方法访问这些隐藏属性 二.封装手段 使用双下划线将属性和方法隐藏起来 cla ...

  10. 跨域 XMLHttpRequest对象

    XMLHttpRequest对象是ajax编程的基础,用于发送请求(数据)与服务端进行交互. 目前主流浏览器都内置了XMLHttpRequest对象. 浏览器会使用XMLHttpRequest对象来创 ...