c语言没有像java那么丰富的字符串操作函数,很多有用的函数得自己写,搞了一天,写了几个常用函数,留着以后有用。

mystr.c:

#include <string.h>
#include <stdio.h>/*将str1字符串中第一次出现的str2字符串替换成str3*/
void replaceFirst(char *str1, char *str2, char *str3)
{char str4[strlen(str1) + 1];char *p;strcpy(str4, str1);if ((p = strstr(str1, str2)) != NULL)/*p指向str2在str1中第一次出现的位置*/{while (str1 != p && str1 != NULL)/*将str1指针移动到p的位置*/{str1++;}str1[0] = '\0';/*将str1指针指向的值变成/0,以此来截断str1,舍弃str2及以后的内容,只保留str2以前的内容*/strcat(str1, str3);/*在str1后拼接上str3,组成新str1*/strcat(str1, strstr(str4, str2) + strlen(str2));/*strstr(str4,str2)是指向str2及以后的内容(包括str2),strstr(str4,str2)+strlen(str2)就是将指针向前移动strlen(str2)位,跳过str2*/}
}/*将str1出现的所有的str2都替换为str3*/
void replace(char *str1, char *str2, char *str3)
{while (strstr(str1, str2) != NULL){replaceFirst(str1, str2, str3);}
}/*截取src字符串中,从下标为start开始到end-1(end前面)的字符串保存在dest中(下标从0开始)*/
void substring(char *dest, char *src, int start, int end)
{int i = start;if (start > strlen(src)){return;}if (end > strlen(src)){end = strlen(src);}while (i < end){dest[i - start] = src[i];i++;}dest[i - start] = '\0';return;
}/*返回src中下标为index的字符*/
char charAt(char *src, int index)
{char *p = src;int i = 0;if ((index < 0) || (index > strlen(src))){return 0;}while (i < index){i++;}return p[i];
}/*返回str2第一次出现在str1中的位置(下表索引),不存在返回-1*/
int indexOf(char *str1, char *str2)
{char *p = str1;int i = 0;p = strstr(str1, str2);if (p == NULL){return -1;}else{while (str1 != p){str1++;i++;}}return i;
}/*返回str1中最后一次出现str2的位置(下标),不存在返回-1*/
int lastIndexOf(char *str1, char *str2)
{char *p = str1;int i = 0, len = strlen(str2);p = strstr(str1, str2);if (p == NULL){return -1;}while (p != NULL){for (; str1 != p; str1++){i++;}p = p + len;p = strstr(p, str2);}return i;
}/*删除str左边第一个非空白字符前面的空白字符(空格符和横向制表符)*/
void ltrim(char *str)
{int i = 0, j, len = strlen(str);while (str[i] != '\0'){if ((str[i] != 32) && (str[i] != 9)){break;                     /*32:空格,9:横向制表符*/}i++;}if (i != 0){for (j = 0; j <= len - i; j++){str[j] = str[j + i];/*将后面的字符顺势前移,补充删掉的空白位置*/}}
}/*删除str最后一个非空白字符后面的所有空白字符(空格符和横向制表符)*/
void rtrim(char *str)
{char *p = str;int i = strlen(str) - 1;while (i >= 0){if ((p[i] != 32) && (p[i] != 9)){break;}i--;}str[++i] = '\0';
}/*删除str两端的空白字符*/
void trim(char *str)
{ltrim(str);rtrim(str);
}

mystr.h:

extern void replaceFirst(char *str1, char *str2, char *str3);
extern void replace(char *str1, char *str2, char *str3);
extern void substring(char *dest, char *src, int start, int end);
extern char charAt(char *src, int index);
extern int indexOf(char *str1, char *str2);
extern int lastIndexOf(char *str1, char *str2);
extern void ltrim(char *str);
extern void rtrim(char *str);
extern void trim(char *str);

再写个测试文件test.c:

#include <string.h>
#include <stdio.h>
#include "mystr.h"
void main()
{char buf[20] = "012345126";char buf2[10];replaceFirst(buf, "12", "9999");printf("replaceFirst:%s\n", buf);strcpy(buf, "012345126");replace(buf, "12", "9999");printf("replace:%s\n", buf);strcpy(buf, "01234560");substring(buf2, buf, 2, 5);printf("substring:%s\n", buf2);printf("charAt:%c\n", charAt(buf, 4));printf("indexOf:%d\n", indexOf(buf, "234"));printf("lastIndexOf:%d\n", lastIndexOf(buf, "0"));strcpy(buf, "    0123    ");ltrim(buf);printf("ltrim:||%s||\n", buf);strcpy(buf, "    0123     ");rtrim(buf);printf("rtrim:||%s||\n", buf);strcpy(buf, "    0123    ");trim(buf);printf("trim:||%s||\n", buf);strcpy(buf, "  ");trim(buf);printf("trim2:||%s||\n", buf);
}

编译运行如下:

gcc test.c mystr.c -o str./str# 结果如下
replaceFirst:09999345126replace:0999934599996substring:234charAt:4indexOf:2lastIndexOf:7ltrim:||0123 ||rtrim:|| 0123||trim:||0123||trim2:||||

linux c 字符串函数 replace indexOf substring 实现相关推荐

  1. SQL替换字符串函数replace()

    REPLACE ( str, from_str, to_str ) str:需要被修改的字符串 from_str:要被替换的子字符串 to_str :新的子字符串 SELECT REPLACE(&qu ...

  2. Linux C 字符串函数sprintf()和snprinttf()

    sprintf()函数详解 int sprintf( char *buffer, const char *format , - ); 函数说明:将格式化的字符串输入到buffer中. 函数返回值:bu ...

  3. linux截取字符串函数,Linux下实现字符串截取方法总结

    Linux下实现字符串截取,大体上可以分为两种,使用命令实现截取,使用工具实现截取.具体截取方式如下: a.#截取,可以实现删除左边字符,保留右边字符 从左边第一个>开始,删除>及之前的所 ...

  4. 字符串函数 replace() 方法妙用

    alert('10 12 14 16'.replace(/d+/g,function(match){return parseInt(match,10) > 10 ? '*' : match; } ...

  5. insert 语句_替换某字段中的特定字符串——MySQL REPLACE 与INSERT 函数详解

    MySQL提供了一个非常实用的字符串函数--REPLACE() 函数,它允许用新的字符串替换字段中的特定字符串,而不再需要自己写函数去替换,用起来非常的方便. REPLACE() 函数语法 需要注意的 ...

  6. linux进程snprintf函数功能,linux 之 snprintf函数用法

    int snprintf(char *restrict buf, size_t n, const char * restrict  format, ...); 函数说明:最多从源串中拷贝n-1个字符到 ...

  7. pandas使用replace函数和正则表达式移除dataframe字符串数据列中头部指定模式字符串(Removing leading substring in dataframe)

    pandas使用replace函数和正则表达式移除dataframe字符串数据列中头部指定模式字符串(Removing leading substring in dataframe) 目录

  8. pandas使用replace函数和正则表达式移除dataframe字符串数据列中尾部指定模式字符串(Removing trailing substring in dataframe)

    pandas使用replace函数和正则表达式移除dataframe字符串数据列中尾部指定模式字符串(Removing trailing substring in dataframe) 目录

  9. jstl 处理字符串函数 substring spli等

    在jstl中的fn标签也是我们在网页设计中经常要用到的很关键的标签,在使用的时候要先加上头 <%@ taglib uri="http://java.sun.com/jsp/jstl/f ...

最新文章

  1. Resources$NotFoundException Resource is not a Drawable (color or path) 问题解决
  2. 甲骨文严查Java授权,企业连夜删除JDK
  3. mysql查询包含字符串(模糊查询)
  4. 【转】打印机硬件发现不了解决办法
  5. linux qt目录查看,QT遍历目录获取文件信息
  6. 原生 js 生成二维码
  7. vs2010和matlab混合编程,VS2010与Matlab2010b混合编程
  8. Android 项目必备(二十)-->NFC 的基本使用
  9. 怎么用imp命令把dmp文件从本地导入到远处的数据库服务器,Oracle 数据库导入导出dmp文件...
  10. Visual Studio部署HoloLens 找不到WindowsMobile SDK
  11. ArcGIS中裁剪(clip)出现000117错误的解决办法
  12. 自己写的一个AI输入滤波函数
  13. IGRP和EIGRP的无缝结合
  14. keyshot Pro for Mac(3D渲染和动画制作)兼容big sur
  15. 2021 12月CSP认证心得
  16. Infortrend混合存储推动大体量血站IT系统全面升级
  17. 【U8】填制凭证输入完摘要,回车后报错运行时错误70,拒绝的权限。
  18. bert模型可以做文本主题识别吗_文本匹配方法系列––BERT匹配模型
  19. 怎么样才能在服务器显示皮肤,我的世界正不显示皮肤,怎么在右上角显示出皮肤...
  20. exp oracle远程主机,cmd oracle exp 远程数据库命令

热门文章

  1. Netflow/IPFIX 流量收集与分析
  2. 运放电路复习,放大器、加法器、积分器、差分放大电路等
  3. 解压缩工具 WinRAR 5.71 + x64 Final 中文汉化版
  4. 大势所趋,应用如何适配Android P HEIF图片格式
  5. java 实现HTTP连接(HTTPClient)
  6. 关于向Mybatis传递多个参数进行SQL查询的用法
  7. 转载/JSTL/attribute value does not accept any express
  8. 第 4 章 Glance - 022 - 如何使用 OpenStack CLI
  9. jquery gridly (拖拽插件)
  10. 二维几何变换---OpenGL几何变换编程示例