12.字符串全部替换指定文本

运行结果:

完整代码:

  1 #define _CRT_SECURE_NO_WARNINGS
  2 #include <stdlib.h>
  3 #include <stdio.h>
  4 #include <string.h>
  5
  6 void replaceAll(char *ppstr, char *from, char *to)
  7 {
  8     //备份地址
  9     //首地址,用于被赋值
 10     char *start1 = ppstr;
 11     //游标,用于给start1赋值
 12     char *start2 = ppstr;
 13     //求出要被转换的字符串和要被转成的字符串长度,分三种情况讨论
 14     int length1 = strlen(from);
 15     int length2 = strlen(to);
 16     //如果要替换的字符串长度和原来的相等
 17     if (length1 == length2)
 18     {
 19         while ((*start1 = *start2) != ‘\0‘)
 20         {
 21             //假定找到子串
 22             int flag = 1;
 23             //判断是否找到子串
 24             for (int i = 0; i < strlen(from); i++)
 25             {
 26                 if (start2[i] != from[i] || start2[i] == ‘\0‘)
 27                 {
 28                     flag = 0;
 29                     break;
 30                 }
 31             }
 32
 33             //如果没找到子串,被赋值的地址自增,游标自增
 34             if (flag == 0)
 35             {
 36                 start1++;
 37                 start2++;
 38             }
 39             else//如果找到了,则进行替换
 40             {
 41                 //start2 += length1;//删除
 42                 //赋值
 43                 for (int i = 0; i < length1; i++)
 44                 {
 45                     start1[i] = to[i];
 46                 }
 47                 //前进
 48                 start1 += length1;
 49                 start2 += length1;
 50             }
 51         }
 52     }
 53     //如果要替换的字符串长度大于原来的长度
 54     else if(length1 < length2)
 55     {
 56         while ((*start1 = *start2) != ‘\0‘)
 57         {
 58             //假定相等
 59             int flag = 1;
 60             for (int i = 0; i < strlen(from); i++)
 61             {
 62                 if (start2[i] != from[i] || start2[i] == ‘\0‘)
 63                 {
 64                     flag = 0;
 65                     break;
 66                 }
 67             }
 68
 69             if (flag == 0)
 70             {
 71                 start1++;
 72                 start2++;
 73             }
 74             else
 75             {
 76                 //start2 += length1;//删除
 77                 //求出差距
 78                 int chaju = length2 - length1;
 79                 //整体向后移动,留出空位
 80                 for (char *ptemp = ppstr + strlen(ppstr); ptemp >= start1 + length1; ptemp--)
 81                 {
 82                     *(ptemp + chaju) = *ptemp;
 83                 }
 84                 //把空位填充数据
 85                 for (int i = 0; i < length2; i++)
 86                 {
 87                     start1[i] = to[i];
 88                 }
 89                 //游标和地址移动
 90                 start1 += length2;
 91                 start2 += length2;
 92             }
 93         }
 94     }
 95     //如果要替换的字符串长度小于原来的长度
 96     else if (length1 > length2)
 97     {
 98         while ((*start1 = *start2) != ‘\0‘)
 99         {
100             //假定相等
101             int flag = 1;
102             for (int i = 0; i < strlen(from); i++)
103             {
104                 if (start2[i] != from[i] || start2[i] == ‘\0‘)
105                 {
106                     flag = 0;
107                     break;
108                 }
109             }
110
111             if (flag == 0)
112             {
113                 start1++;
114                 start2++;
115             }
116             else
117             {
118                 //start2 += length1;//删除
119                 //赋值
120                 int chaju = length1 - length2;
121                 //整体向前移动,压缩数据
122                 for (char *ptemp = start1 + length2; *ptemp != ‘\0‘; ptemp++)
123                 {
124                     *ptemp = *(ptemp + chaju);
125                     if (*(ptemp + chaju) == ‘\0‘)
126                     {
127                         break;
128                     }
129                 }
130
131                 //填充
132                 for (int i = 0; i < length2; i++)
133                 {
134                     start1[i] = to[i];
135                 }
136
137                 //游标和地址移动
138                 start1 += chaju;
139                 start2 += chaju;
140             }
141         }
142     }
143
144
145 }
146
147 void main()
148 {
149     char str[100] = "我爱中国 我爱南京 我爱上海 我爱家庭";
150     char from[10] = "我";
151     char to[10] = "我和你";
152     printf("原数据:%s\n", str);
153     printf("要被替换的数据:%s\n", from);
154     printf("替换成:%s\n", to);
155     replaceAll(str, from, to);
156     printf("替换后的数据:%s\n", str);
157     getchar();
158 }

原文地址:https://www.cnblogs.com/xiaochi/p/8365411.html

时间: 2024-10-31 14:26:50

12.字符串全部替换指定文本的相关文章

perl 遍历指定目录下的所有文件,替换指定文本内容,返回受影响的文件路径

不会读取 影藏文件 main #!/usr/bin/perl my ($path, $rp) = @ARGV; sub search_file{ my ($fname, $rp) = @_; # 获取操作文件名 和 查询的正则 my ($o) = split("/", $rp); open(of, "<$fname") or die "$fname 文件打开失败!$!"; while(<of>){ chomp; if($_ =~

替换指定文本并写入新文件

#!/usr/bin/env python '''Replace oldfile's char 'wang' to char 'yuan' replace char 'wang' to char 'yuan',and write the changed  file into 'newfile' in production environment replace the keywords following: oldfile wang yuan newfile ''' oldfile = raw_

PHP替换指定字符串

在PHP中,有两个函数可以实现字符串替换,strtr()和str_repalce()函数. 首先我们简单了解下strtr()函数的定义及语法. strtr:转换指定字符. 两个语法: 第一种语法: string strtr( string $str, string $from, string $to) 第一个参数表示待转换的字符串.第二个参数表示字符串中与将要被转换的目的字符 to 相对应的源字符.第三个参数表示字符串中与将要被转换的字符 from 相对应的目的字符. 第二种语法: string

C#字符串操作 取文本左边 取文本右边 取文本中间 取文本中间到List集合 指定文本倒序

/// <summary> /// 取文本左边内容 /// </summary> /// <param name="str">文本</param> /// <param name="s">标识符</param> /// <returns>左边内容</returns> public static string GetLeft(string str, string s) {

MySQL批量替换指定字段字符串

MySQL批量替换是我们经常会用到的功能,有时站内包含敏感词,会给我们带来麻烦,而在信息量较大的情况下,一篇篇查找.修改是不现实的. 用MySQL批量替换,甚是轻松.发布在这里供参考,以备不时之需. MySQL批量替换指定字段字符串语句 UPDATE 数据表名 SET 字段名 = replace(字段名, '要替换的字符串', '替换为') WHERE 设定条件; 比如本站今天发现站内关于linux命令的文章 标题不是太好,以前都是以 linux下mkdir命令使用详解---linux创建目录命

js替换字符串中所有指定的字符

第一次发现JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符. 而str.replace(/\-/g,"!")则可以全部替换掉匹配的字符(g为全局标志). replace() The replace() method returns the string that results when you replace text matching its first argumen

机器学习入门-文本数据-构造词频词袋模型 1.re.sub(进行字符串的替换) 2.nltk.corpus.stopwords.words(获得停用词表) 3.nltk.WordPunctTokenizer(对字符串进行分词操作) 4.np.vectorize(对函数进行向量化) 5. CountVectorizer(构建词频的词袋模型)

函数说明: 1. re.sub(r'[^a-zA-Z0-9\s]', repl='', sting=string)  用于进行字符串的替换,这里我们用来去除标点符号 参数说明:r'[^a-zA-Z0-9\s]' 配对的模式,^表示起始位置,\s表示终止位置,[]表示取中间部分,这个的意思是找出除字符串大小写或者数字组成以外的东西,repl表示使用什么进行替换,这里使用'',即直接替换,string表示输入的字符串 2. stopwords = nltk.corpus.stopwords.word

js中字符串的替换

定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. 语法 stringObject.replace(regexp/substr,replacement)参数 描述 regexp/substr 必需.规定子字符串或要替换的模式的 RegExp 对象. 请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象. replacement 必需.一个字符串值.规定了替换文本或生成替换文本的函数. 返

JS利用正则配合replace替换指定字符

替换指定字符的方法有很多,在本文为大家详细介绍下,JS利用正则配合replace是如何做到的,喜欢的朋友可以参考下 定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. 语法 stringObject.replace(regexp,replacement) 参数 描述 regexp 必需.规定了要替换的模式的 RegExp 对象.请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象. re