不利用C语言库函数,实现字符串相关函数
#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语言库函数,实现字符串相关函数的更多相关文章
- C语言复习:字符串和一级指针
字符串基本操作 字符数组初始化方法 int main() { //1 {}号法 初始化列表 //数组初始化有2种方法 默认元素个数.指定元素个数 char buf1[] = { ...
- C语言处理json字符串
JSON语法说明 先来看一个简单的JSON 1 { 2 "stars": [ 3 { 4 "name": "Faye", 5 "a ...
- C语言库函数大全及应用实例十四
原文:C语言库函数大全及应用实例十四 [编程资料]C语言库函数大全及应用实例十四 函数名: strset 功 能: 将一个串 ...
- C语言库函数大全及应用实例十三
原文:C语言库函数大全及应用实例十三 [编程资料]C语言库函数大全及应用实例十三 函数名: stat 功 能: 读取打 ...
- C语言库函数大全及应用实例十二
原文:C语言库函数大全及应用实例十二 [编程资料]C语言库函数大全及应用实例十二 函数名: setrgbpalette ...
- C语言库函数大全及应用实例九
原文:C语言库函数大全及应用实例九 [编程资料]C语言库函数大全及应用实例九 函数名: mktemp 功 ...
- C语言库函数大全及应用实例八
原文:C语言库函数大全及应用实例八 [编程资料]C语言库函数大全及应用实例八 函数名: kbhit 功 能: 检查 ...
- C语言库函数大全及应用实例五
原文:C语言库函数大全及应用实例五 [编程资料]C语言库函数大全及应用实例五 函数名: getcurdi ...
- C语言库函数大全及应用实例六
原文:C语言库函数大全及应用实例六 [编程资料]C语言库函数大全及应用实例六 函数名: getlinesett ...
随机推荐
- python numpy中数组.min()
import numpy as np a = np.array([[1,5,3],[4,2,6]]) print(a.min()) #无参,所有中的最小值 print(a.min(0)) # axis ...
- tp5学习
tp5的表单验证 tp5验证码的使用: tp5分页后页面跳转:少参数的处理方法: tp5绑定根目录为: public目录下的index.php 隐藏index.php .htaccess文件修改 控制 ...
- 做了5年的Android,我转Java后台了!
很多人做Java开发4,5年后,都会感觉自己遇到瓶颈.什么都会又什么都不会,如何改变困境,为什么很多人写了7,8年还是一个码农,工作中太多被动是因为不懂底层原理.公司的工作节奏又比较快,难有机会学习架 ...
- python 面向对象编程(高级篇)
飞机票 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对 ...
- mvn tomcat7:help的14个命令
D:\2018\code\XXX>mvn tomcat7:help [INFO] Scanning for projects... [INFO] [INFO] ----------------- ...
- 3、SourceTree通过PUTTY连接GitLab
一.生成公钥和私钥 使用命令行生成(两种生成方式选择一种即可) 1.安装SourceTree打开SourceTree,点击“命令行模式”. 2.输入如下命令生成key“example@example. ...
- Confluence 6 用户目录图例 - 可读写连接 LDAP
上面的图:Confluence 连接到一个 LDAP 目录. https://www.cwiki.us/display/CONFLUENCEWIKI/Diagrams+of+Possible+Conf ...
- string标准C++中的的用法总结(转)
转自:http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻 ...
- 【sqli-labs】Less1~Less4
学习sql注入啦,一下都是我做sqli-labs时的笔记.可能有错误,如果有人发现了欢迎指正~~ 常用知识点: 1.mysql注释有三种:① #: 注释从#到行尾 ② --空格: 注释到行尾,注意-- ...
- 常用ajax样例
---恢复内容开始--- // url(String):请求地址 // param(String):请求参数 // targetId(String):结果显示id function ajaxReq(u ...