IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言实现【三步翻转法】将一句话的单词进行倒置 -> 正文阅读

[C++知识库]C语言实现【三步翻转法】将一句话的单词进行倒置

目录

?一、解题思路

?? 二、完整代码+注释

?? 三、代码剖析

?? 1.实现字符串整体的翻转

?? 2.一个单词的翻转

??3.字符串中的每一个单词的翻转


?一、解题思路

如何将一句话的单词倒置,而标点不倒置?

例如:I like beijing. 倒置成:beijing. like I

? ? ? ? 可以利用三步翻转法,先将整句话倒置,再将每个单词倒置。前面的例子中输入的内容有空格,如果使用 scanf() 函数的话,scanf 检测到空格后就停止录入了;所以要使用 gets() 函数,gets 可以直接录入一行,包括空格。

代码示例:

可以看到 scanf() 函数读取到空格就不读了。

gets() 函数可以连空格一起读入。

?? 二、完整代码+注释

//将一句话的单词进行倒置,标点不导致。
//例如:I like BiJing. 倒置成BiJing. like I
#include<stdio.h>

#include<string.h>

void reverse(char* left, char* right)
{
	while (left < right)
	{
		char temp = *left;
		*left = *right;
		*right = temp;
		left++;
		right--;
	}
}

int main()
{
	char arr[100] = { 0 };
	//I like BiJing.
	gets(arr);
	//三步翻转法
	//1.字符串整体翻转
	// .gniJib ekil I
	int len = strlen(arr);//求字符串长度
	reverse(arr, arr + len - 1);

	//2每个单词翻转
	//BiJing. like I
	char* strat = arr;//*strat指向数组首元素的地址
	while (*strat)//*strat指向'\0'跳出循环
	{
		char* end = strat;//*end指向*strat指向的内容
		while (*end != ' ' && *end != '\0')
		{
			end++;
		}
		//逆序一个单词
		reverse(strat, end - 1);
		if (*strat == ' ')//一个单词倒置结束
		{
			strat = end + 1;
		}
        //整个字符串倒置结束
		else
		{
			strat = end;
		}
	}
	printf("%s\n", arr);
	return 0;
}

?? 三、代码剖析

?? 1.实现字符串整体的翻转

??

? ? ? ? 首先使用 strlen 求出字符个数, 定义 reverse() 函数来进行倒置。使用指针访问字符串最左端和最右端的字符,然后利用 temp 空变量进行三个值的交换,也就是倒置。

函数实现的代码如下:

void reverse(char* left, char* right)
{
	while (left < right)
	{
		char temp = *left;
		*left = *right;
		*right = temp;
		left++;
		right--;
	}
}

?? 2.一个单词的翻转

? ? ? ?先定义一个 strat 指向字符串的第一个单词,在定义一个 end 指向 strat 所指向的位置,也就是字符串的第一个单词的地址。、

?

? ? ? ? 使用 while 循环判断 end 指向的位置是不是空格或者 \0 ,?如果 end 指向的位置不是 \0 ,就说明当前字符串还未倒置完成, end 指向空格就说明当前一个单词倒置结束。当 end 不是指向空格的时候,end++ 就可以指向下一个位置,直至找到这一个单词所有的字母,然后调用 reverse 进行倒置。

?

??3.字符串中的每一个单词的翻转

? ? ? ? 我们可以倒置完一个单词后利用 if 判断 strat 指向的位置是不是空格,或者是不是 \0 。如果是空格就说明还有单词未倒置,strat 就指向 end + 1的位置,这个位置就是下一个单词首字母的位置;如果是 \0 就说明整个字符串的单词已经全部倒置完成,strat 就指向 end 的位置,也就是 \0的位置。

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-25 11:31:44  更:2022-05-25 11:31:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/13 12:52:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码