#include<stdio.h>

 int strLength(char* s)//求字符长度
{
int i=;
while(s[i]!=NULL)
{
i++;
}
return i;
} int* getNext(char* p)
{
int length=strLength(p);
int* next=(int *)calloc(length,sizeof(int));
next[] = -;
int j = ;
int k = -;
while (j < length - )
{
if (k == - || p[j] == p[k])
{
if (p[++j] == p[++k])
{ // 当两个字符相等时要跳过 next[j] = next[k];
}
else
{
next[j] = k;
}
}
else
{
k = next[k];
}
}
return next;
} int KMP(char* t,char* p)
{
int i = ; // 主串的位置
int j = ; // 模式串的位置
int lengtht=strLength(t);
int lengthp=strLength(p);
int *next=getNext(p); while (i < lengtht && j < lengthp)
{
if (j == - || t[i] == p[j])
{ // 当j为-1时,要移动的是i,当然j也要归0
i++;
j++;
}
else
{
// i不需要回溯了
// i = i - j + 1;
j = next[j]; // j回到指定位置
}
} if (j == lengthp)
{
return i - j;
}
else
{
return -;
}
} void strCopy(char *des,char *src)//字符串拷贝
{
int i=;
while(src[i]!=NULL)
{
des[i]=src[i];
i++;
}
} void destroyStr(char *des)//字符串删除
{
free(des);
} bool strEmpty(char *des)//判断字符串是否为空
{
if(des[]==NULL)
{
return true;
}
else
{
return false;
}
} int strCompare(char *s1,char *s2)//字符串比较
{
int flag;
for(int i=;;i++)
{
if(s1[i]==NULL&&s2[i]!=NULL)
{
flag=-;
break;
}
else if(s1[i]!=NULL&&s2[i]==NULL)
{
flag=;
break;
}
else if(s1[i]==NULL&&s2[i]==NULL)
{
flag=;
break;
}
}
return flag;
} char* strConcat(char* s1,char* s2)//字符串连接函数
{
int length1,length2;
length1=strLength(s1);
length2=strLength(s2);
char *s=(char *)malloc(sizeof(char)*(length1+length2));
int i=;
while(s1[i]!=NULL)
{
s[i]=s1[i];
i++;
}
int j=;
while(s2[j]!=NULL)
{
s[i]=s2[j];
i++;
j++;
}
return s;
} char* strSub(char* s,int pos,int length)//将str串从pos位置开始复制到subStr中
{
char *sub=(char *)malloc(sizeof(char)*length);//建议此处将malloc函数改为calloc函数;calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。
int i=pos;
int count=;
while(count<=length)
{
sub[count]=s[i];
i++;
count++;
}
return sub;
} char* strReplace(char* s,char* sub,char* replaceStr)//字符串替换
{
int end;
char* temp1;
char* temp2;
int begin=;
int subLength=strlen(sub);
end=KMP(s,sub);
while(end!=-)
{
temp1=strSub(s,begin,end-begin);
temp2=strSub(s,end+subLength,strlen(s)-(end+subLength));
s=strcat(temp1,replaceStr);
s=strcat(s,temp2);
end=KMP(s,sub);
}
return s;
}

不利用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. Confluence 6 配置数字格式

    在 Confluence 中使用了 2 种数字格式: 整形数字格式.例如: ############### 小数数字格式.例如:###############.########## Confluenc ...

  2. Remove Duplicates from Sorted ListII

    给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4->4->5 输出: 1-&g ...

  3. 基于ajax实现的登录

    一.需要知道的新知识点 1.刷新验证码.给src属性加一个?号.加个?会重新去请求 //#给验证码刷新 $(".vialdCode_img").click(function () ...

  4. java----Java的栈,堆,代码,静态存储区的存储顺序和位置

    转载:https://blog.csdn.net/zhangbaoanhadoop/article/details/82193497

  5. Centos6.8部署jumpserver(完整版)

    环境: 系统 Centos6.8 IP:192.168.66.131 关闭selinux和防火墙 # 修改字符集,否则可能报 input/output error的问题,因为日志里打印了中文 # lo ...

  6. 配置webpack loader vue 报错:Module build failed: TypeError: this._init is not a function

    单文件组件 引入时报错 配置webpage.config.js中的vue 需要如下写法 { test: /\.vue/, loader: "vue-loader", } 之前写的l ...

  7. Senparc.Weixin微信开发(1) 开发验证

    官方系列教程 http://www.cnblogs.com/szw/archive/2013/05/20/3089479.html 登录微信公众平台后-左侧找到开发--启用服务器配置 这样,我们才可以 ...

  8. 删除TFS中的项目

    打开“Team Foundation Server 管理控制台”,选择应用层->团队项目集合->团队项目->点击项目集合名称,最后点击右侧出现的删除按钮

  9. LVS(IPVS)了解

    从来都只是看文章,现在手工作一下. 参考URL: https://blog.csdn.net/langyue919/article/details/80935197 https://www.cnblo ...

  10. WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Exception in thread "main" java.io.IOException: No FileSystem for sc F

    1.执行脚本程序报如下所示的错误: [hadoop@slaver1 script_hadoop]$ hadoop jar web_click_mr_hive.jar com.bie.hive.mr.C ...