不利用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 ...
随机推荐
- linux压缩与解压(持续更新)
压缩 tar cvzf w.tar.gz xxx1 xxx2 对应解压:tar xvzf w.tar.gz
- Modbus库开发笔记之二:Modbus消息帧的生成
前面我们已经对Modbus的基本事务作了说明,也据此设计了我们将要实现的主从站的操作流程.这其中与Modbus直接相关的就是Modbus消息帧的生成.Modbus消息帧也是实现Modbus通讯协议的根 ...
- restricted 模式及其 使用
什么是数据库的RESTRICTED 模式 注:以下内容来至:百度知道 --数据库受限模式,在这个模式下只有RESTRICTED SESSION 权限的人才可以登陆,一般用与数据库维护的时候使用. RE ...
- Confluence 6 使用 WebDAV 客户端来对页面进行操作
下面的部分告诉你如何在不同的系统中来设置原生的 WebDAV 客户端,这个客户端通常显示在你操作系统的文件浏览器中,例如,Windows 的 Windows Explorer 或者 Linux 的 K ...
- Confluence 6 PostgreSQL 测试你的数据库连接
在你的数据库设置界面,有一个 测试连接(Test connection)按钮可以检查: Confluence 可以连接你的数据库服务器 数据库字符集的编码是否设置正确 你的数据库用户是否有正确的权限可 ...
- 【Java】「深入理解Java虚拟机」学习笔记(4)- 类文件结构
我为什么喜欢Java,另一个重要原因就是跨平台,WORA. 程序员是爽了,但肯定有人要为你遮风挡雨,解决WORA的基石就是字节码+虚拟机. ♣Tip 其实这里存在两种无关性,一是平台无关性.另一个是语 ...
- jQuery File Upload的使用
jQuery File Upload 是一个Jquery文件上传组件,支持多文件上传.取消.删除,上传前缩略图预览.列表显示图片大小,支持上传进度条显示等,以下就介绍一下该插件的简单使用 1.需要加载 ...
- python http请求类
# -*- coding: UTF-8 -*- # coding="utf-8" import httplib2 import json from urllib.parse imp ...
- python面向对象三大特性之封装
一. 概述 定义:隐藏对象的属性和实现细节,仅对外提供公共访问方式 封装的原则:把不需要对外提供的内容都隐藏起来,提供公共的方法访问这些隐藏属性 二.封装手段 使用双下划线将属性和方法隐藏起来 cla ...
- 跨域 XMLHttpRequest对象
XMLHttpRequest对象是ajax编程的基础,用于发送请求(数据)与服务端进行交互. 目前主流浏览器都内置了XMLHttpRequest对象. 浏览器会使用XMLHttpRequest对象来创 ...