【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | 引入线程安全概念 )
生活随笔
收集整理的這篇文章主要介紹了
【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | 引入线程安全概念 )
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 一、引入線程安全概念
- 二、完整代碼示例
一、引入線程安全概念
在上一篇博客 【C 語(yǔ)言】字符串模型 ( 字符串翻轉(zhuǎn)模型 | 借助 遞歸函數(shù)操作 逆序字符串操作 | strncat 函數(shù) ) 中 , 雖然 使用遞歸 實(shí)現(xiàn)了 字符串逆序 , 但是最終字符串是寫(xiě)在全局變量中的 , 如果多個(gè)線程訪問(wèn)該方法 , 肯定就出錯(cuò)了 ;
在函數(shù)調(diào)用時(shí) , 傳入一個(gè)局部變量 char *str_buf , 使用該局部變量存儲(chǔ) 逆序后的字符串 ;
/** 通過(guò)遞歸方式 , 逆向遍歷字符串* 將 遞歸遍歷 結(jié)果存入 全局變量中* 遞歸指針 作 函數(shù)參數(shù)*/ void str_inverse(char *str, char *str_buf)二、完整代碼示例
完整代碼示例 :
#include <stdio.h> #include <stdlib.h> #include <string.h>/** 通過(guò)遞歸方式 , 逆向遍歷字符串* 將 遞歸遍歷 結(jié)果存入 全局變量中* 遞歸指針 作 函數(shù)參數(shù)*/ void str_inverse(char *str, char *str_buf) {// 驗(yàn)證函數(shù)形參指針合法性if(str == NULL || str_buf == NULL){return;}// 遞歸停止條件if(*str == '\0'){return;}// 遞歸操作// 該遞歸操作會(huì)逐步 將 字符串 從開(kāi)始位置 入棧// 直到遞歸到 '\0' 位置時(shí) , 才開(kāi)始出棧// 此處是遞歸點(diǎn)// 遞歸操作執(zhí)行到這里 , 開(kāi)始一直遞歸// 遞歸結(jié)束后 , 依次執(zhí)行下面的代碼str_inverse(str + 1, str_buf);// 打印出棧的字符// 注意 : 該打印操作是 遞歸停止條件達(dá)成后// 逐個(gè)出棧打印printf("*str = %c\n", *str);// 拷貝一個(gè)字符到全局變量中//strncpy(str_buf, str, 1);// 連接字符串 , 從 '\0' 位置處開(kāi)始覆蓋strncat(str_buf, str, 1); }int main() {// 存在如下字符串, 求下面字符串 "abc" 出現(xiàn)次數(shù)char *str = "sdh";// 用于存儲(chǔ)逆序后的字符串char str_buf[1024] = {0};// 字符串翻轉(zhuǎn)str_inverse(str, str_buf);// 打印字符串翻轉(zhuǎn)結(jié)果printf("str_buf = %s\n", str_buf);// 命令行不要退出system("pause");return 0; }執(zhí)行結(jié)果 :
*str = h *str = d *str = s str_buf = hds 請(qǐng)按任意鍵繼續(xù). . .總結(jié)
以上是生活随笔為你收集整理的【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | 引入线程安全概念 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【C 语言】字符串模型 ( 字符串翻转模
- 下一篇: 【C 语言】字符串模型 ( 键值对模型