当前位置:网站首页>将一句话的单词进行倒置(C语言纯代码)
将一句话的单词进行倒置(C语言纯代码)
2022-08-05 05:17:00 【Captain林】
一、例题
将一句话的单词进行倒置,标点不倒置。比如 I like beijing.经过函数后变为:beijing.like I
示例1:
输入
I like beijing.
输出
beijing.like I
二、统筹解析版
#include <stdio.h>
#include <assert.h>
void reverse(char* l, char* r)
{
assert(l && r);//检查指针是否位NULL
while (l < r)
{
char tmp = *l;
*l = *r;
*r = tmp;
l++;
r--;
}
}
int main()
{
char arr[100] = { 0 };
//输入
gets(arr);
int len = strlen(arr);
//逆序
//1. 逆序整个字符串
char* left = arr;
char* right = arr + len - 1;
reverse(left, right);
//2. 逆序每个单词
char* cur = arr;
char* start = arr;//一个单词的第一个字母的地址
while (*cur != '\0')//循环到结尾
{
while (*cur != ' ' && *cur != '\0')//单词后空格或结尾停止,该循环过后直接去到单词最后一个字母的地址
{
cur++;
}
reverse(start, cur - 1);//逆序单词
start = cur + 1;//初始指针跳到第二个单词上
if (*cur != '\0')//如果不是末尾,cur指针跳到第二个单词上,重新开始第一个大循环
cur++;
}
printf("%s\n", arr);//输出逆序数组
return 0;
}
三、初学者易错分析重构版
#include<assert.h>
#include<stdio.h>
void reserve(char* left, char* right)
{
assert(left && right);
while (left < right)
{
char temp = *left;
*left = *right;
*right = temp;
//指针在每次循环后要进行加位,否则不能调换这段字符串
left++;
//指针在每次循环后要进行减位,否则不能调换这段字符串
right--;
}
}
int main()
{
//输入
char arr[100] = { 0 };
gets(arr);//gets函数输入可以存入包括空格在内的字符
//整个数组逆序 - 设计一个函数reserve实现逆序
//如何定义函数?
char* left = arr;//这里的指针也要用char类型储存
int len = strlen(arr) - 1;
char* right = arr + len;
reserve(left, right);
//单词逆序
char* start = arr;
char* cur = arr;
while (*cur != '\0')//while后面不用加;
{
while (*cur != ' ' && *cur != '\0')//这里既不可以是空格,也不可以是结尾,因此要用&&
{
cur++;
}
reserve(start, cur - 1);//这里跳出循环后,cur的值应该是空格或是'\0'
start = cur + 1;
//if (*cur != '\0')
cur += 1;
}
//输出
printf("%s", arr);
return 0;
}
四、结语
我是计算机海洋的新进船长Captain_ldx,如果我的文章能对您有帮助的话,麻烦各位观众姥爷们点赞、收藏、关注我吧!如果你对我的文章有任何问题或者意见,欢迎在评论区给我留言。后期C语言的知识点将持续更新......
边栏推荐
- SQL (2) - join window function view
- 【Pytorch学习笔记】11.取Dataset的子集、给Dataset打乱顺序的方法(使用Subset、random_split)
- 1008 数组元素循环右移问题 (20 分)
- [Pytorch study notes] 9. How to evaluate the classification results of the classifier - using confusion matrix, F1-score, ROC curve, PR curve, etc. (taking Softmax binary classification as an example)
- 哥廷根大学提出CLIPSeg,能同时作三个分割任务的模型
- 【论文阅读-表情捕捉】ExpNet: Landmark-Free, Deep, 3D Facial Expressions
- LeetCode刷题之第61题
- C语言联合体union占用空间大小问题
- MySQL
- 【nodejs】第一章:nodejs架构
猜你喜欢
随机推荐
电子产品量产工具(5)- 页面系统实现
【Multisim仿真】直流稳压电源设计报告
多边形等分
IJCAI 2022|边界引导的伪装目标检测模型BGNet
五、请求处理—Rest映射是怎样实现的?
PoE视频监控解决方案
八、响应处理——ReturnValueHandler匹配返回值处理器并处理返回值原理解析
【shell编程】第三章:函数
Tensorflow2 与 Pytorch 在张量Tensor基础操作方面的对比整理汇总
基于STM32F407的一个温度传感器报警系统(用的是DS18B20温度传感器,4针0.96寸OLED显示屏,并且附带日期显示)
深度学习系列(一)简介、线性回归与成本函数
二、自动配置之底层注解
初识机器学习
【数据库和SQL学习笔记】10.(T-SQL语言)函数、存储过程、触发器
【Pytorch学习笔记】9.分类器的分类结果如何评估——使用混淆矩阵、F1-score、ROC曲线、PR曲线等(以Softmax二分类为例)
【数据库和SQL学习笔记】5.SELECT查询3:多表查询、连接查询
【Shell编程】第一章:子串
Thread handler handle IntentServvice handlerThread
六步搞定子网划分
教你如何封装功能组件和页面组件