青山翠 發表於 2024-1-11 00:00:00

Linux C字符串替换函数实例详解

<p>
        <strong>Linux C字符串替换函数实例详解</strong></p>
<p>
                       最近学习linux 的基础编程知识,字符串替换函数,在网上找下资料,觉得这篇文章写的不错,记录下来,和大家分享一下:</p>
<p>
        实例代码:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightercpp" id="highlighter_584209">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                        <div class="line number16 index15 alt1">
                                                                16</div>
                                                        <div class="line number17 index16 alt2">
                                                                17</div>
                                                        <div class="line number18 index17 alt1">
                                                                18</div>
                                                        <div class="line number19 index18 alt2">
                                                                19</div>
                                                        <div class="line number20 index19 alt1">
                                                                20</div>
                                                        <div class="line number21 index20 alt2">
                                                                21</div>
                                                        <div class="line number22 index21 alt1">
                                                                22</div>
                                                        <div class="line number23 index22 alt2">
                                                                23</div>
                                                        <div class="line number24 index23 alt1">
                                                                24</div>
                                                        <div class="line number25 index24 alt2">
                                                                25</div>
                                                        <div class="line number26 index25 alt1">
                                                                26</div>
                                                        <div class="line number27 index26 alt2">
                                                                27</div>
                                                        <div class="line number28 index27 alt1">
                                                                28</div>
                                                        <div class="line number29 index28 alt2">
                                                                29</div>
                                                        <div class="line number30 index29 alt1">
                                                                30</div>
                                                        <div class="line number31 index30 alt2">
                                                                31</div>
                                                        <div class="line number32 index31 alt1">
                                                                32</div>
                                                        <div class="line number33 index32 alt2">
                                                                33</div>
                                                        <div class="line number34 index33 alt1">
                                                                34</div>
                                                        <div class="line number35 index34 alt2">
                                                                35</div>
                                                        <div class="line number36 index35 alt1">
                                                                36</div>
                                                        <div class="line number37 index36 alt2">
                                                                37</div>
                                                        <div class="line number38 index37 alt1">
                                                                38</div>
                                                        <div class="line number39 index38 alt2">
                                                                39</div>
                                                        <div class="line number40 index39 alt1">
                                                                40</div>
                                                        <div class="line number41 index40 alt2">
                                                                41</div>
                                                        <div class="line number42 index41 alt1">
                                                                42</div>
                                                        <div class="line number43 index42 alt2">
                                                                43</div>
                                                        <div class="line number44 index43 alt1">
                                                                44</div>
                                                        <div class="line number45 index44 alt2">
                                                                45</div>
                                                        <div class="line number46 index45 alt1">
                                                                46</div>
                                                        <div class="line number47 index46 alt2">
                                                                47</div>
                                                        <div class="line number48 index47 alt1">
                                                                48</div>
                                                        <div class="line number49 index48 alt2">
                                                                49</div>
                                                        <div class="line number50 index49 alt1">
                                                                50</div>
                                                        <div class="line number51 index50 alt2">
                                                                51</div>
                                                        <div class="line number52 index51 alt1">
                                                                52</div>
                                                        <div class="line number53 index52 alt2">
                                                                53</div>
                                                        <div class="line number54 index53 alt1">
                                                                54</div>
                                                        <div class="line number55 index54 alt2">
                                                                55</div>
                                                        <div class="line number56 index55 alt1">
                                                                56</div>
                                                        <div class="line number57 index56 alt2">
                                                                57</div>
                                                        <div class="line number58 index57 alt1">
                                                                58</div>
                                                        <div class="line number59 index58 alt2">
                                                                59</div>
                                                        <div class="line number60 index59 alt1">
                                                                60</div>
                                                        <div class="line number61 index60 alt2">
                                                                61</div>
                                                        <div class="line number62 index61 alt1">
                                                                62</div>
                                                        <div class="line number63 index62 alt2">
                                                                63</div>
                                                        <div class="line number64 index63 alt1">
                                                                64</div>
                                                        <div class="line number65 index64 alt2">
                                                                65</div>
                                                        <div class="line number66 index65 alt1">
                                                                66</div>
                                                        <div class="line number67 index66 alt2">
                                                                67</div>
                                                        <div class="line number68 index67 alt1">
                                                                68</div>
                                                        <div class="line number69 index68 alt2">
                                                                69</div>
                                                        <div class="line number70 index69 alt1">
                                                                70</div>
                                                        <div class="line number71 index70 alt2">
                                                                71</div>
                                                        <div class="line number72 index71 alt1">
                                                                72</div>
                                                        <div class="line number73 index72 alt2">
                                                                73</div>
                                                        <div class="line number74 index73 alt1">
                                                                74</div>
                                                        <div class="line number75 index74 alt2">
                                                                75</div>
                                                        <div class="line number76 index75 alt1">
                                                                76</div>
                                                        <div class="line number77 index76 alt2">
                                                                77</div>
                                                        <div class="line number78 index77 alt1">
                                                                78</div>
                                                        <div class="line number79 index78 alt2">
                                                                79</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="cpp preprocessor">#include &lt;stdio.h&gt;</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="cpp preprocessor">#include &lt;string.h&gt;</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="cpp preprocessor">#include &lt;stdlib.h&gt;</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                         </div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="cpp spaces"> </code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                         </div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="cpp comments">/**</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="cpp comments">*</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="cpp comments">* @author: cnscn@163.com</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="cpp comments">* @reference: lovesnow1314@http://community.csdn.net/Expert/TopicView3.asp?id=5198221 </code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="cpp comments">*</code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="cpp comments">* 用新子串newstr替换源字符串src中的前len个字符内所包含的oldstr子串</code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="cpp comments">*</code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="cpp comments">* @param char* dest 目标串,也就是替换后的新串</code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="cpp comments">* @param const char* src 源字符串,被替换的字符串</code>
</div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="cpp comments">* @param const char* oldstr 旧的子串,将被替换的子串</code>
</div>
                                                                <div class="line number17 index16 alt2">
                                                                        <code class="cpp comments">* @param const char* newstr 新的子串</code>
</div>
                                                                <div class="line number18 index17 alt1">
                                                                        <code class="cpp comments">* @param int len 将要被替换的前len个字符</code>
</div>
                                                                <div class="line number19 index18 alt2">
                                                                        <code class="cpp comments">*</code>
</div>
                                                                <div class="line number20 index19 alt1">
                                                                        <code class="cpp comments">* @return char* dest 返回新串的地址</code>
</div>
                                                                <div class="line number21 index20 alt2">
                                                                        <code class="cpp comments">*</code>
</div>
                                                                <div class="line number22 index21 alt1">
                                                                        <code class="cpp comments">*/</code>
</div>
                                                                <div class="line number23 index22 alt2">
                                                                        <code class="cpp color1 bold">char</code> <code class="cpp plain">*strreplace(</code><code class="cpp color1 bold">char</code> <code class="cpp plain">*dest, </code><code class="cpp color1 bold">char</code> <code class="cpp plain">*src, </code><code class="cpp keyword bold">const</code> <code class="cpp color1 bold">char</code> <code class="cpp plain">*oldstr, </code><code class="cpp keyword bold">const</code> <code class="cpp color1 bold">char</code> <code class="cpp plain">*newstr, </code><code class="cpp color1 bold">size_t</code> <code class="cpp plain">len)</code>
</div>
                                                                <div class="line number24 index23 alt1">
                                                                        <code class="cpp plain">{</code>
</div>
                                                                <div class="line number25 index24 alt2">
                                                                        <code class="cpp comments">//如果串相等,则直接返回</code>
</div>
                                                                <div class="line number26 index25 alt1">
                                                                        <code class="cpp keyword bold">if</code><code class="cpp plain">(</code><code class="cpp functions bold">strcmp</code><code class="cpp plain">(oldstr, newstr)==0)</code>
</div>
                                                                <div class="line number27 index26 alt2">
                                                                        <code class="cpp keyword bold">return</code> <code class="cpp plain">src;</code>
</div>
                                                                <div class="line number28 index27 alt1">
                                                                         </div>
                                                                <div class="line number29 index28 alt2">
                                                                        <code class="cpp comments">//子串位置指针</code>
</div>
                                                                <div class="line number30 index29 alt1">
                                                                        <code class="cpp color1 bold">char</code> <code class="cpp plain">*needle;</code>
</div>
                                                                <div class="line number31 index30 alt2">
                                                                         </div>
                                                                <div class="line number32 index31 alt1">
                                                                        <code class="cpp comments">//临时内存区</code>
</div>
                                                                <div class="line number33 index32 alt2">
                                                                        <code class="cpp color1 bold">char</code> <code class="cpp plain">*tmp;</code>
</div>
                                                                <div class="line number34 index33 alt1">
                                                                         </div>
                                                                <div class="line number35 index34 alt2">
                                                                        <code class="cpp comments">//把源串地址赋给指针dest,即让dest和src都指向src的内存区域</code>
</div>
                                                                <div class="line number36 index35 alt1">
                                                                        <code class="cpp plain">dest = src;</code>
</div>
                                                                <div class="line number37 index36 alt2">
                                                                         </div>
                                                                <div class="line number38 index37 alt1">
                                                                        <code class="cpp comments">//如果找到子串, 并且子串位置在前len个子串范围内, 则进行替换, 否则直接返回</code>
</div>
                                                                <div class="line number39 index38 alt2">
                                                                        <code class="cpp keyword bold">while</code><code class="cpp plain">((needle = </code><code class="cpp functions bold">strstr</code><code class="cpp plain">(dest, oldstr)) &amp;&amp; (needle -dest &lt;= len))</code>
</div>
                                                                <div class="line number40 index39 alt1">
                                                                        <code class="cpp plain">{</code>
</div>
                                                                <div class="line number41 index40 alt2">
                                                                        <code class="cpp comments">//分配新的空间: +1 是为了添加串尾的'\0'结束符</code>
</div>
                                                                <div class="line number42 index41 alt1">
                                                                        <code class="cpp plain">tmp=(</code><code class="cpp color1 bold">char</code><code class="cpp plain">*)</code><code class="cpp functions bold">malloc</code><code class="cpp plain">(</code><code class="cpp functions bold">strlen</code><code class="cpp plain">(dest)+(</code><code class="cpp functions bold">strlen</code><code class="cpp plain">(newstr)-</code><code class="cpp functions bold">strlen</code><code class="cpp plain">(oldstr))+1);</code>
</div>
                                                                <div class="line number43 index42 alt2">
                                                                         </div>
                                                                <div class="line number44 index43 alt1">
                                                                        <code class="cpp comments">//把src内的前needle-dest个内存空间的数据,拷贝到arr</code>
</div>
                                                                <div class="line number45 index44 alt2">
                                                                        <code class="cpp functions bold">strncpy</code><code class="cpp plain">(tmp, dest, needle-dest);</code>
</div>
                                                                <div class="line number46 index45 alt1">
                                                                         </div>
                                                                <div class="line number47 index46 alt2">
                                                                        <code class="cpp comments">//标识串结束</code>
</div>
                                                                <div class="line number48 index47 alt1">
                                                                        <code class="cpp plain">tmp=</code><code class="cpp string">'\0'</code><code class="cpp plain">;</code>
</div>
                                                                <div class="line number49 index48 alt2">
                                                                         </div>
                                                                <div class="line number50 index49 alt1">
                                                                        <code class="cpp comments">//连接arr和newstr, 即把newstr附在arr尾部, 从而组成新串(或说字符数组)arr</code>
</div>
                                                                <div class="line number51 index50 alt2">
                                                                        <code class="cpp functions bold">strcat</code><code class="cpp plain">(tmp, newstr);</code>
</div>
                                                                <div class="line number52 index51 alt1">
                                                                         </div>
                                                                <div class="line number53 index52 alt2">
                                                                        <code class="cpp comments">//把src中 从oldstr子串位置后的部分和arr连接在一起,组成新串arr</code>
</div>
                                                                <div class="line number54 index53 alt1">
                                                                        <code class="cpp functions bold">strcat</code><code class="cpp plain">(tmp, needle+</code><code class="cpp functions bold">strlen</code><code class="cpp plain">(oldstr));</code>
</div>
                                                                <div class="line number55 index54 alt2">
                                                                         </div>
                                                                <div class="line number56 index55 alt1">
                                                                        <code class="cpp comments">//把用malloc分配的内存,复制给指针retv</code>
</div>
                                                                <div class="line number57 index56 alt2">
                                                                        <code class="cpp plain">dest = strdup(tmp);</code>
</div>
                                                                <div class="line number58 index57 alt1">
                                                                         </div>
                                                                <div class="line number59 index58 alt2">
                                                                        <code class="cpp comments">//释放malloc分配的内存空间</code>
</div>
                                                                <div class="line number60 index59 alt1">
                                                                        <code class="cpp functions bold">free</code><code class="cpp plain">(tmp);</code>
</div>
                                                                <div class="line number61 index60 alt2">
                                                                        <code class="cpp plain">}</code>
</div>
                                                                <div class="line number62 index61 alt1">
                                                                         </div>
                                                                <div class="line number63 index62 alt2">
                                                                        <code class="cpp keyword bold">return</code> <code class="cpp plain">dest;</code>
</div>
                                                                <div class="line number64 index63 alt1">
                                                                        <code class="cpp plain">}</code>
</div>
                                                                <div class="line number65 index64 alt2">
                                                                         </div>
                                                                <div class="line number66 index65 alt1">
                                                                        <code class="cpp color1 bold">int</code> <code class="cpp plain">main()</code>
</div>
                                                                <div class="line number67 index66 alt2">
                                                                        <code class="cpp plain">{</code>
</div>
                                                                <div class="line number68 index67 alt1">
                                                                        <code class="cpp color1 bold">char</code> <code class="cpp plain">*str=</code><code class="cpp string">"wo i love iyou"</code><code class="cpp plain">;</code>
</div>
                                                                <div class="line number69 index68 alt2">
                                                                        <code class="cpp color1 bold">char</code> <code class="cpp plain">*old=</code><code class="cpp string">"i"</code><code class="cpp plain">;</code>
</div>
                                                                <div class="line number70 index69 alt1">
                                                                        <code class="cpp color1 bold">char</code> <code class="cpp plain">*</code><code class="cpp keyword bold">new</code><code class="cpp plain">=</code><code class="cpp string">"ILOVEYOUYA"</code><code class="cpp plain">;</code>
</div>
                                                                <div class="line number71 index70 alt2">
                                                                         </div>
                                                                <div class="line number72 index71 alt1">
                                                                        <code class="cpp color1 bold">char</code> <code class="cpp plain">*dest;</code>
</div>
                                                                <div class="line number73 index72 alt2">
                                                                        <code class="cpp comments">//分配内存空间: 大小 == src的长度 + newstr和oldstr长度差(可能是正负或0)+1</code>
</div>
                                                                <div class="line number74 index73 alt1">
                                                                        <code class="cpp functions bold">printf</code><code class="cpp plain">(</code><code class="cpp string">"%s\n"</code><code class="cpp plain">,strreplace(dest, str, old, </code><code class="cpp keyword bold">new</code><code class="cpp plain">,1));</code>
</div>
                                                                <div class="line number75 index74 alt2">
                                                                        <code class="cpp functions bold">printf</code><code class="cpp plain">(</code><code class="cpp string">"%s\n"</code><code class="cpp plain">,strreplace(dest, str, old, </code><code class="cpp keyword bold">new</code><code class="cpp plain">,5));</code>
</div>
                                                                <div class="line number76 index75 alt1">
                                                                        <code class="cpp functions bold">printf</code><code class="cpp plain">(</code><code class="cpp string">"%s\n"</code><code class="cpp plain">,strreplace(dest, str, old, </code><code class="cpp keyword bold">new</code><code class="cpp plain">,40));</code>
</div>
                                                                <div class="line number77 index76 alt2">
                                                                         </div>
                                                                <div class="line number78 index77 alt1">
                                                                        <code class="cpp keyword bold">return</code> <code class="cpp plain">0;</code>
</div>
                                                                <div class="line number79 index78 alt2">
                                                                        <code class="cpp plain">}</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!</p>
頁: [1]
查看完整版本: Linux C字符串替换函数实例详解