当前位置:网站首页>将一句话的单词进行倒置(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语言的知识点将持续更新......
边栏推荐
- 华科提出首个用于伪装实例分割的一阶段框架OSFormer
- 【nodejs】第一章:nodejs架构
- AIDL detailed explanation
- 读论文 - Unpaired Portrait Drawing Generation via Asymmetric Cycle Mapping
- Detailed explanation of BroadCast Receiver (broadcast)
- LeetCode刷题之第24题
- MaskDistill-不需要标注数据的语义分割
- Redis集群(docker版)——从原理到实战超详细
- WCH系列芯片CoreMark跑分
- HuiFer 带你读懂 BeanFactory getBean 方法
猜你喜欢
七、请求处理——Map、Model类型参数处理原理
You should write like this
【数据库和SQL学习笔记】9.(T-SQL语言)定义变量、高级查询、流程控制(条件、循环等)
【论文精读】Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation(R-CNN)
【22李宏毅机器学习】课程大纲概述
读论文-Cycle GAN
面向小白的深度学习代码库,一行代码实现30+中attention机制。
PID详解
【Pytorch学习笔记】11.取Dataset的子集、给Dataset打乱顺序的方法(使用Subset、random_split)
原来何恺明提出的MAE还是一种数据增强
随机推荐
【ts】typescript高阶:键值类型及type与interface区别
四、Web场景之静态资源配置原理
用GAN的方法来进行图片匹配!休斯顿大学提出用于文本图像匹配的对抗表示学习,消除模态差异!
原型版本管理
神经网络也能像人类利用外围视觉一样观察图像
九、响应处理——内容协商底层原理
吞吐?带宽?傻傻分不清楚
LeetCode刷题之第61题
SharedPreferences and SQlite database
[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)
2021电赛资源及经验总结
Comparison and summary of Tensorflow2 and Pytorch in terms of basic operations of tensor Tensor
[Pytorch study notes] 10. How to quickly create your own Dataset dataset object (inherit the Dataset class and override the corresponding method)
MSRA proposes extreme masking model ExtreMA for learning instances and distributed visual representations
ECCV2022 | RU&谷歌提出用CLIP进行zero-shot目标检测!
Redis设计与实现(第三部分):多机数据库的实现
CVPR2021 - Inception Convolution with Efficient Dilation Search
CAN、CAN FD
八、请求处理之自定义类型参数绑定原理
LeetCode刷题之第24题