当前位置:网站首页>将一句话的单词进行倒置(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语言的知识点将持续更新......
边栏推荐
猜你喜欢

MySQL主从复制—有手就能学会的MySQL集群搭建教程

读论文- pix2pix
![[Pytorch study notes] 10. How to quickly create your own Dataset dataset object (inherit the Dataset class and override the corresponding method)](/img/71/f82e76085f9d8e6610f6f817e2148f.png)
[Pytorch study notes] 10. How to quickly create your own Dataset dataset object (inherit the Dataset class and override the corresponding method)

LeetCode刷题之第54题

Thread handler handle IntentServvice handlerThread

LeetCode刷题之第86题

【数据库和SQL学习笔记】5.SELECT查询3:多表查询、连接查询

【Pytorch学习笔记】10.如何快速创建一个自己的Dataset数据集对象(继承Dataset类并重写对应方法)

1008 数组元素循环右移问题 (20 分)

基于STM32F407的一个温度传感器报警系统(用的是DS18B20温度传感器,4针0.96寸OLED显示屏,并且附带日期显示)
随机推荐
Thread handler handle IntentServvice handlerThread
【ts】typescript高阶:模版字面量类型
网管日记:故障网络交换机快速替换方法
Facial Motion Capture 调研
「实用」运维新手一定不能错过的17 个技巧
PoE视频监控解决方案
LeetCode刷题之第24题
【nodejs】第一章:nodejs架构
leetCode刷题之第31题
[Intensive reading of the paper] R-CNN's Bounding box regression problem is detailed
CVPR 2022 | 70% memory savings, 2x faster training
6k+ star,面向小白的深度学习代码库!一行代码实现所有Attention机制!
LeetCode刷题之第86题
关于存储IOPS你必须了解的概念
AIDL detailed explanation
ECCV2022 | RU&谷歌提出用CLIP进行zero-shot目标检测!
【ts】typescript高阶:键值类型及type与interface区别
六步搞定子网划分
【论文阅读-表情捕捉】High-quality Real Time Facial Capture Based on Single Camera
The University of Göttingen proposed CLIPSeg, a model that can perform three segmentation tasks at the same time