当前位置: 首页 > news >正文

【C语言刷题】倒置字符串

解题思路与过程

  • 📽️解题思路
  • 📽️解题过程
    • 🔧1.输入
    • 🔧2.设计逆序函数
    • 🔧3.逆序整个字符串
    • 🔧4.逆序每个单词
  • 📽️源码

请添加图片描述
📷先来看题👇
在这里插入图片描述

📽️解题思路

🔴 首先我们定义一个字符数组来存放字符串,然后用 gets函数来读入字符串,接下来进行处理阶段,设计一个逆序函数逆序整个字符串,然后再逆序每个单词,最后处理一下细节再输出

📽️解题过程

🔧1.输入

定义完一个字符数组后,因为scanf不吃空格符和换行符,所以这里输入我们采用gets函数来进行读入字符串,看代码👇

int main()
{char arr[101] = { 0 };//输入gets(arr);

🔧2.设计逆序函数

看代码👇

void reverse(char* left, char* right)
{assert(*left != NULL);assert(*right != NULL);while (left < right){char tmp = *left;*left = *right;*right = tmp;left++;right--;}
}

☝️字符串的首尾元素逐个进行交换(不包括\0)☝️

因为传过来的是数组首元素地址,所以我们要用指针变量来接收,为了代码更谨慎,这里使用了assert断言,防止遇到空指针而导致程序运行错误(不能忘记引头文件<assert.h>)

🔧3.逆序整个字符串

	int len = strlen(arr);//逆序整个字符串reverse(arr, arr + len - 1);

👉我们使用strlen函数来计算字符串元素个数(不要忘记引头文件<string.h>),然后调用 reverse函数进行整个字符串的逆置。
👉这里的 arr + len - 1是首元素地址+字符串长度(整数)- 1 得到的是末尾元素的地址如果不 - 1指向的就是 ’\0‘了

🔧4.逆序每个单词

char* cur = arr;while (*cur){//找一个单词char* start = cur;while (*cur != ' ' && *cur != '\0'){cur++;}reverse(start, cur - 1);if (*cur == ' '){cur++;}}

👉定义一个指针变量cur来接收逆序整个字符串之后的arr数组首元素地址,然后如果cur指向的字符不是’\0’的话就进入循环,然后再定义一个指针变量start来接收每个单词的首元素地址,然后进入循环判断如果cur指向的不是空格或者’\0’就往后跳一个字符,直到cur指向的是空格或者’\0‘了,就说明已经遍历完确认了一个单词,然后进入reverse函数 来逆序单词(cur - 1 是因为如果不 -1,cur指向的是空格或者’\0‘
👉最后如果cur指向的是空格而不是’\0‘就说明还没有结束,还有单词没有逆序完,往后跳一个字符循环继续

👉最后打印输出

📽️源码

#include<stdio.h>
#include<string.h>
#include<assert.h>void reverse(char* left, char* right)
{assert(*left != NULL);assert(*right != NULL);while (left < right){char tmp = *left;*left = *right;*right = tmp;left++;right--;}
}
int main()
{char arr[101] = { 0 };//输入gets(arr);//处理int len = strlen(arr);//逆序整个字符串reverse(arr, arr + len - 1);//逆序每个单词char* cur = arr;while (*cur){//找一个单词char* start = cur;while (*cur != ' ' && *cur != '\0'){cur++;}reverse(start, cur - 1);if (*cur == ' '){cur++;}}//打印printf("%s\n", arr);return 0;
}

🥰希望大家能够理解!

总结🥰
本文章旨在【C语言刷题】专栏,感兴趣的烙铁可以订阅本专栏哦🥳🥳🥳
希望我们可以做一个用心的人💕💕💕
小的会继续学习,继续努力带来更好的作品😊😊😊
创作写文不易,还多请各位大佬uu们多多支持哦🥰🥰🥰

请添加图片描述

http://www.lryc.cn/news/12334.html

相关文章:

  • 用switch语句编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:
  • uboot编译分析
  • SpringCloud Alibaba集成Dubbo实现远程服务间调用
  • 网络编程(一)
  • PVE硬件直通之强制IOMMU分组
  • 深入讲解Kubernetes架构-node
  • XSS-labs-master
  • 「可信计算」助力TLS 传输更安全
  • 链表学习基础
  • springboot整合阿里云oss文件服务器
  • 数据分析:旅游景点销售门票和消费情况分析
  • Android问题解决方案(一):Android 打空包后提示没有”android:exported“的属性设置
  • Portraiture2023最新版人像图像后期处理软件
  • 链表OJ(七)删除有序链表中重复的元素-I -II
  • C语言经典编程题100例(81~100)
  • ChIP-seq 分析:数据质控实操(5)
  • java黑马头条 day5自媒体文章审核 敏感词过滤算法DFA 集成RabbitMQ实现自动审核
  • python--matplotlib(1)
  • 华为OD机试题 - 获取最大软件版本号(JavaScript)
  • 字符函数和字符串函数
  • 【猜名次】-C语言-题解
  • 对 equals() 和 hashCode() 的理解?
  • IDEA插件安装慢、超时、不成功问题如何解决?
  • 软考高级之信息系统案例分析七重奏-《5》
  • JUC并发编程 Ⅳ -- 共享模型之无锁
  • Spring之AOP实现
  • Spring之基于xml的自动装配、基于Autowired注解的自动装配
  • 【案例】--(非分布式)轻量级任务调度平台
  • key的作用原理与列表的遍历、追加、搜索、排序
  • SQL性能优化的47个小技巧,你了解多少?