当前位置:网站首页>将一句话的单词进行倒置(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语言的知识点将持续更新......
边栏推荐
猜你喜欢
四、Web场景之静态资源配置原理
【Kaggle项目实战记录】一个图片分类项目的步骤和思路分享——以树叶分类为例(用Pytorch)
物联网:LoRa无线通信技术
[Practice 1] Diabetes Genetic Risk Detection Challenge [IFLYTEK Open Platform]
十、视图解析原理与源码分析
常见的 PoE 错误和解决方案
CVPR best paper winner Huang Gao's team from Tsinghua University presented the first dynamic network review
【Pytorch学习笔记】11.取Dataset的子集、给Dataset打乱顺序的方法(使用Subset、random_split)
LeetCode刷题之第74题
Tensorflow2 与 Pytorch 在张量Tensor基础操作方面的对比整理汇总
随机推荐
全尺度表示的上下文非局部对齐
LeetCode刷题之第746题
LeetCode刷题之第54题
Tensorflow2 与 Pytorch 在张量Tensor基础操作方面的对比整理汇总
LeetCode刷题之第55题
基于STM32F407的WIFI通信(使用的是ESP8266模块)
[Database and SQL study notes] 9. (T-SQL language) Define variables, advanced queries, process control (conditions, loops, etc.)
LeetCode刷题之第61题
CVPR2021 - Inception Convolution with Efficient Dilation Search
浅谈遇到的小问题
【Pytorch学习笔记】11.取Dataset的子集、给Dataset打乱顺序的方法(使用Subset、random_split)
单片机按键开发库-支持连击、长按等操作
PID详解
《基于机器视觉的输电线路交叉点在线测量方法及技术方案》论文笔记
读论文 - Unpaired Portrait Drawing Generation via Asymmetric Cycle Mapping
【ts】typescript高阶:条件类型与infer
ACL 的一点心得
ECCV2022 | RU & Google propose zero-shot object detection with CLIP!
CVPR 2020 - 频谱正则化
发顶会顶刊论文,你应该这样写作