Linux C字符串替换函数实例详解
Linux C字符串替换函数实例详解
最近学习linux 的基础编程知识,字符串替换函数,在网上找下资料,觉得这篇文章写的不错,记录下来,和大家分享一下:
实例代码:
#include <stdio.h> #include <string.h> #include <stdlib.h> /** * * @author: cnscn@163.com * @reference: lovesnow1314@http://community.csdn.net/Expert/TopicView3.asp?id=5198221 * * 用新子串newstr替换源字符串src中的前len个字符内所包含的oldstr子串 * * @param char* dest 目标串,也就是替换后的新串 * @param const char* src 源字符串,被替换的字符串 * @param const char* oldstr 旧的子串,将被替换的子串 * @param const char* newstr 新的子串 * @param int len 将要被替换的前len个字符 * * @return char* dest 返回新串的地址 * */ char *strreplace(char *dest, char *src, const char *oldstr, const char *newstr, size_t len) { //如果串相等,则直接返回 if(strcmp(oldstr, newstr)==0) return src; //子串位置指针 char *needle; //临时内存区 char *tmp; //把源串地址赋给指针dest,即让dest和src都指向src的内存区域 dest = src; //如果找到子串, 并且子串位置在前len个子串范围内, 则进行替换, 否则直接返回 while((needle = strstr(dest, oldstr)) && (needle -dest <= len)) { //分配新的空间: +1 是为了添加串尾的'\0'结束符 tmp=(char*)malloc(strlen(dest)+(strlen(newstr)-strlen(oldstr))+1); //把src内的前needle-dest个内存空间的数据,拷贝到arr strncpy(tmp, dest, needle-dest); //标识串结束 tmp[needle-dest]='\0'; //连接arr和newstr, 即把newstr附在arr尾部, 从而组成新串(或说字符数组)arr strcat(tmp, newstr); //把src中 从oldstr子串位置后的部分和arr连接在一起,组成新串arr strcat(tmp, needle+strlen(oldstr)); //把用malloc分配的内存,复制给指针retv dest = strdup(tmp); //释放malloc分配的内存空间 free(tmp); } return dest; } int main() { char *str="wo i love iyou"; char *old="i"; char *new="ILOVEYOUYA"; char *dest; //分配内存空间: 大小 == src的长度 + newstr和oldstr长度差(可能是正负或0)+1 printf("%s\n",strreplace(dest, str, old, new,1)); printf("%s\n",strreplace(dest, str, old, new,5)); printf("%s\n",strreplace(dest, str, old, new,40)); return 0; }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
详解Linux命令修改文件的三个时间
Linux命令如何修改文件的三个时间 本文主要对stat和touch两个命令进行讲解. 如何查看一个文件的元数据呢?可以使用stat命令. File: 'ceshi1' 文件所在路径 Size: 4096 Blocks: 8 文件占据的磁盘块 IO Block: 4096 directory 文件类型 Device: 801h/2049d 文件所在的设备名 Inode: 378 文件索引节点号 Links: 4 被硬链接的次数 Access:
-
linux指令man page之rm,mv详解
linux指令man page之rm,mv详解 man rm NAME rm - 移除文件档案或者目录 SYNOPSIS rmdir [OPTION]... FILE... OPTIONS -f, --force 忽略不存在的文件,不显示提示信息 -i, --interactive 移除前询问 -r, -R, --recursive 递归移除目录及其包含的文件 --help 显示帮助信息 --version 显示版本信息 man mv NAME mv - 移动(重命名)文件 SYNOPS
-
浅谈Linux 脚本 sh 和 ./ 的区别
如果.不在PATH里面,要执行当前目录下的可执行文件,使用全路径: ./executable-file PATH是环境变量,如果将当前目录"./"添加到环境变量中,那么也可以不用"./",直接输入当前目录下有可执行权限的可执行文件就可以运行了 如果要执行一个sh脚本,不管那个脚本有没有可执行权限,都可以使用: sh [file] 这时file是作为参数传给sh的,如果file不在当前目录下,也需要使用全路径. 全路径有绝对路径和相对路径两种../和../开头的都是相
-
php在linux中可能用到的命令(推荐)
如下所示: php -i | grep php.ini 查找php.ini的位置 php-cgi -b 127.0.0.1:9000 & 查看php-cgi进程 以上这篇php在linux中可能用到的命令(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.
-
linux touch,chattr指令详解及用法
linux touch,chattr指令详解 man touch NAME touch - 更改文件的时间戳 SYNOPSIS touch [OPTION]... FILE... DESCRIPTION 更新文件的atime和mtime为现在的时间 -a 仅修文件被取用的时间 -c, --no-create 文件不存在是不建立新的档案 -d, --date=STRING 使用STRING的设定而不使用现在的时间 -m 仅修改文件内容变更的时间 -t STAMP 使用[[CC]YY]MMDDhh
-
Linux shell tr 命令详解
Linux shell tr 命令详解 1. 用途 tr,translate的简写,主要用于压缩重复字符,删除文件中的控制字符以及进行字符转换操作. 2. 语法 tr [OPTION]... SET1 [SET2] 3. 参数 3.1 -s 压缩重复字符 -s: squeeze-repeats,用SET1指定的字符来替换对应的重复字符 (replace each input sequence of a repeated character that is listed in SET1
-
linux 详解useradd 命令基本用法
linux 详解useradd 命令基本用法 概要: 在 Linux 中 useradd 是个很基本的命令,但是使用起来却很不直观.以至于在 Ubuntu 中居然添加了一个 adduser 命令来简化添加用户的操作.本文主要描述笔者在学习使用 useradd 命令时的一些测试结果. 说明:本文中的所有试验都是在 Ubuntu14.04 上完成. 功能 在Linux中 useradd 命令用来创建或更新用户信息. useradd 命令属于比较难用的命令 (low level utility for
-
Linux shell命令帮助格式详解
前言 linux shell命令通常可以通过-h或--help来打印帮助说明,或者通过man命令来查看帮助,有时候我们也会给自己的程序写简单的帮助说明,其实帮助说明格式是有规律可循的 帮助示例 下面是git reset命令的帮助说明,通过man git-reset可以查看 git reset [-q] [<tree-ish>] [--] <paths>... git reset (--patch | -p) [<tree-ish>] [--] [<paths>
-
Linux监视进程之ps命令详解
本文参考<UNIX/Linux系统管理技术手册>. 操作系统:Debian8.5 仅仅以下常用的三种组合命令的解释,更加齐全的命令请自行ps --help all 查看. 一.ps -ef 输出展示: UID PID PPID C STIME TTY TIME CMD root 1 0 0 2016 ? 00:00:28 /lib/systemd/systemd --system --deserialize 15 root 2 0 0 2016 ? 00:00:00 [kthreadd] ro
-
Linux C字符串替换函数实例详解
Linux C字符串替换函数实例详解 最近学习linux 的基础编程知识,字符串替换函数,在网上找下资料,觉得这篇文章写的不错,记录下来,和大家分享一下: 实例代码: #include <stdio.h> #include <string.h> #include <stdlib.h> /** * * @author: cnscn@163.com * @reference: lovesnow1314@http://community.csdn.net/Expert/Top
-
C语言字符串替换空格实例详解
目录 一.题目描述 二.思路分析 三.整体代码 总结 一.题目描述 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例: 输入:s = "We are happy." 输出:"We%20are%20happy." 限制:0 <= s 的长度 <= 10000 二.思路分析 思路 C语言的字符串无法改变大小,所以无法直接在原来的字符串上操作.于是我们先统计空格个数,算出替换后的字符串的大小,并申请一块新内存.(注意要多申
-
Linux 在Shell脚本中使用函数实例详解
Linux 在Shell脚本中使用函数实例详解 Shell的函数 Shell程序也支持函数.函数能完成一特定的功能,可以重复调用这个函数. 函数格式如下: 函数名() { 函数体 } 函数调用方式: 函数名 参数列表 实例:编写一函数add求两个数的和,这两个数用位置参数传入,最后输出结果. root@ubuntu:/home/study# vi test3 #!/bin/bash add(){ a=$1; b=$2; z=`expr $a + $b`; echo "The sum is $z&
-
JavaScript中push(),join() 函数 实例详解
定义和用法 push方法 可向数组的末尾添加一个或多个元素,并返回一个新的长度. join方法 用于把数组中所有元素添加到一个指定的字符串,元素是通过指定的分隔符进行分割的. 语法 arrayObject.push(newelement1,newelement2,....,newelementX) arrayObject.join(separator). 参数描述newelement1必需.要添加到数组的第一个元素.newelement2可选.要添加到数组的第二个元素.newelementX可选
-
C 语言中strstr函数实例详解
C 语言中strstr函数实例详解 strstr函数 strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串.如果是,则该函数返回str2在str1中首次出现的地址:否则,返回NULL const char* strstr(const char* str1,const char* str2); char* strstr(char* str1,const char* str2); 库中实现的strstr #include <stdio.h> #include <
-
Linux消息队列实现进程间通信实例详解
Linux消息队列实现进程间通信实例详解 一.什么是消息队列 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法. 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构.我们可以通过发送消息来避免命名管道的同步和阻塞问题.但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制. Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度. 二.在Linux中使用消息队列 Linux提供了一系列消息队列的函数接口来让我们方便地使用
-
Linux中的内核链表实例详解
Linux中的内核链表实例详解 链表中一般都要进行初始化.插入.删除.显示.释放链表,寻找节点这几个操作,下面我对这几个操作进行简单的介绍,因为我的能力不足,可能有些东西理解的不够深入,造成一定的错误,请各位博友指出. A.Linux内核链表中的几个主要函数(下面是内核中的源码拿出来给大家分析一下) 1)初始化: #define INIT_LIST_HEAD(ptr) do { \ (ptr)->next = (ptr); (ptr)->prev = (ptr); \ } while (0)
-
python 遍历字符串(含汉字)实例详解
python 遍历字符串(含汉字)实例详解 s = "中国china" for j in s: print j 首先一个,你这个'a'是什么编码?可能不是你所想的gbk >>> a='中国' >>> a 这样试试看,如果出来是6个字(word),说明是utf-8,如果是4个字,说明gbk. 另外,不管是utf-8还是gbk,都不能这样遍历,因为这里它会一个字一个字拿出来.虚拟机把a当成一个长度为len(a)的字符串了. 接下来是遍历问题. Linux
-
PHP 序列化和反序列化函数实例详解
序列化与反序列化 把复杂的数据类型压缩到一个字符串中 serialize() 把变量和它们的值编码成文本形式 unserialize() 恢复原先变量 1.创建一个$arr数组用于储存用户基本信息,并在浏览器中输出查看结果: $arr=array(); $arr['name']='张三'; $arr['age']='22'; $arr['sex']='男'; $arr['phone']='123456789'; $arr['address']='上海市浦东新区'; var_dump($arr):
-
Java 生成随机字符串数组的实例详解
Java 生成随机字符串数组的实例详解 利用Collections.sort()方法对泛型为String的List 进行排序.具体要求: 1.创建完List<String>之后,往其中添加十条随机字符串 2.每条字符串的长度为10以内的随机整数 3.每条字符串的每个字符都为随机生成的字符,字符可以重叠 4.每条随机字符串不可重复 将涉及到的知识有: String.StringBuffer.ListArray.泛型.Collections.sort.foreach.Random等相关知识,算是
随机推荐
- php rsa加密解密使用详解
- Angular.js 4.x中表单Template-Driven Forms详解
- QQ程序文件详解及一些特别用法
- Apache+php+mysql在windows下的安装与配置(图文)第1/2页
- 一个JavaScript用逗号分割字符串实例
- Python FTP操作类代码分享
- JQuery CSS样式控制 学习笔记
- 使用jquery修改表单的提交地址基本思路
- jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
- linux命令行下使用curl命令查看自己机器的外网ip
- C++泛型算法的一些总结
- shift妙用之解决shell编程中的入参问题
- Python安装Imaging报错:The _imaging C module is not installed问题解决方法
- JavaScript的Module模式编程深入分析
- jquery创建一个ajax关键词数据搜索实现思路
- 分析进入Win2000后留下的足迹
- 利用java读取web项目中json文件为map集合方法示例
- 深入解析Java中的编码转换以及编码和解码操作
- 网站排名有了中国标准 转
- iOS 10 和Xcode8 一起 创建 Siri 功能步骤详解(OC写的 )