【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | 引入线程安全概念 )
文章目录
- 一、引入线程安全概念
- 二、完整代码示例
一、引入线程安全概念
在上一篇博客 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | strncat 函数 ) 中 , 虽然 使用递归 实现了 字符串逆序 , 但是最终字符串是写在全局变量中的 , 如果多个线程访问该方法 , 肯定就出错了 ;
在函数调用时 , 传入一个局部变量 char *str_buf
, 使用该局部变量存储 逆序后的字符串 ;
/** 通过递归方式 , 逆向遍历字符串* 将 递归遍历 结果存入 全局变量中* 递归指针 作 函数参数*/
void str_inverse(char *str, char *str_buf)
二、完整代码示例
完整代码示例 :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>/** 通过递归方式 , 逆向遍历字符串* 将 递归遍历 结果存入 全局变量中* 递归指针 作 函数参数*/
void str_inverse(char *str, char *str_buf)
{// 验证函数形参指针合法性if(str == NULL || str_buf == NULL){return;}// 递归停止条件if(*str == '\0'){return;}// 递归操作// 该递归操作会逐步 将 字符串 从开始位置 入栈// 直到递归到 '\0' 位置时 , 才开始出栈// 此处是递归点// 递归操作执行到这里 , 开始一直递归// 递归结束后 , 依次执行下面的代码str_inverse(str + 1, str_buf);// 打印出栈的字符// 注意 : 该打印操作是 递归停止条件达成后// 逐个出栈打印printf("*str = %c\n", *str);// 拷贝一个字符到全局变量中//strncpy(str_buf, str, 1);// 连接字符串 , 从 '\0' 位置处开始覆盖strncat(str_buf, str, 1);
}int main()
{// 存在如下字符串, 求下面字符串 "abc" 出现次数char *str = "sdh";// 用于存储逆序后的字符串char str_buf[1024] = {0};// 字符串翻转str_inverse(str, str_buf);// 打印字符串翻转结果printf("str_buf = %s\n", str_buf);// 命令行不要退出system("pause");return 0;
}
执行结果 :
*str = h
*str = d
*str = s
str_buf = hds
请按任意键继续. . .
【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | 引入线程安全概念 )相关推荐
- 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | strncat 函数 )
文章目录 一.strncat 字符串连接函数 二.借助 递归函数操作 逆序字符串操作 三.完整代码示例 一.strncat 字符串连接函数 strncat 函数 : 将 const char *src ...
- 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序打印字符串 | 递归要素 | 递归停止条件 | 递归操作 )
文章目录 一.借助 递归函数操作 逆序打印字符串 二.完整代码示例 一.借助 递归函数操作 逆序打印字符串 递归需要掌握下面 222 个点 : 参数入栈模型 : 第 111 次 , "sdh ...
- [C语言指针练习二]字符串逆序,使用指针,写一个函数,可以逆序字符串的内容。
指针练习题2 题目:字符串逆序 内容与要求:使用指针,写一个函数,可以逆序一个字符串的内容. 举例: 输入: I Love You. 输出: .uoY evoL I 输入: abc 输出: cba ...
- 逆序字符串 和 字符串的逆序输出 的区别~
今天我们讲解字符串的逆序和逆序输出,并且通过一个综合题型来加深印象和练手! 超佳出品 文章目录 前言 一.逆序字符串,字符串的逆序输出是什么? 二.实例讲解 1.字符串的逆序输出 2.逆序字符串 总结 ...
- 利用函数“逆序字符串”的三种解法
文章目录 方法一:使用数组下标的方法进行字符串的逆序 方法二:使用数组地址的方式逆序字符串 方法三:直接传数组首位元素地址进行逆序 写一个函数,可以逆序一个字符串的内容 方法一:使用数组下标的方法进行 ...
- python12345输出54321_C语言编写程序 :输入一个正整数,将其逆序输出。例如,输入12345,输出54321. 跪求大神用循环语句...
点击查看C语言编写程序 :输入一个正整数,将其逆序输出.例如,输入12345,输出54321. 跪求大神用循环语句具体信息 答:#include int main() { int num; scanf ...
- c语言智力题 操作符详解例题 数据存储 指针初阶 水仙花数 杨辉三角 逆序字符串 喝汽水问题 打印图形 猜凶手 使用指针打印数组内容 调整奇数偶数顺序 运动员猜名次
[题目名称] 下面代码的结果是:a #include <stdio.h> int i; int main() {i--; //sizeof'的返回值是无符号整型if (i > siz ...
- C语言逆序字符串(递归实现)
算法思想 以字符串"abcdef"为例 1.将a保存到temp中 2.将f放到a的位置 3.f处填写'\0' 4.计算bcde的长度 5.如果bcde的长度大于1,则逆序 6.将a ...
- 每天一道LeetCode-----以单词为单位逆序字符串,每个单词之间以一个空格分隔(原字符串中可能有多个空格)
Reverse Words in a String 原题链接Reverse Words in a String 将字符串以单词为单位逆序,每个单词之间以一个空格间隔(原字符串中可能有多个空格) 逆序的 ...
最新文章
- SAP PM 设备维护事务码收集整理
- 智慧停车介绍、产业链市场全透析
- mac on linux,Mac- on- Linux
- HTML表格中的nowrap
- 如何做到全年配送 0 故障?盒马揭秘 12个关键技术
- 【机器视觉】 dev_unmap_prog算子
- 如何用Python探究你喜爱的歌手?大数据还是很厉害的
- mybatisplus查询今天的数据_Spring系列——MybatisPlus
- php 导航栏链接网页,怎样用php来给网页做导航栏_php实例
- [转载]项目风险管理七种武器-离别钩
- oracle Lpad()函数和Rpad()函数的用法
- CF995A Tesla
- win10 uwp 重启软件
- 4K 对齐与固态硬盘检测工具
- CAD.net二次开发之图层,文字样式,标注样式,标注封装,引线的封装
- 如何确定直流电机驱动的 PWM 频率
- ps制作设计网站登录界面
- ArcBlock世界第一区块链基石生态系统
- 硕士论文怎么寻找创新点?
- 中缀和后缀表达式的转换