(c语言)将一句话的单词进行倒置,标点不倒置(i like beijing.)

news2025/1/2 2:57:01

目录

例子:

思路方法:

​编辑

 (分板块)代码的实现:

一.字符串的获取(3种简单的方法)

1.用gets()函数,即使中间有空格也会读取

2.用fgets()函数     

3.用scanf("%[^\n]s")读取也可以达到同样的效果

二.字符串倒置代码的实现:

字符串倒置的代码实现:

 三.每个单词的倒置代码实现:

整个代码的实现:

 知识点总结:



例子:

"I like beijing.",经过处理后变为:"beijing. like I"。
//字符串长度不超过100。(注意不是简单的将字符串全部倒置);


思路方法:

方法:

第一步:先将字符串全部倒置;

第二步:将每个单词进行倒置;

方法2:

也可以先进行单词倒置,在将整个字符串倒置;

图解:

 


 

(分板块)代码的实现:

一.字符串的获取(3种简单的方法)

注意:

这里我们不能通过循环用scanf函数来读取;因为scanf()函数遇到空格就停止读取;

例如

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	char arr[100];
	int i = 0;
	while (scanf("%s", &arr) != EOF)
	{
		;
	}

	return 0;
}

当输入  “ i  like   beijing." 时,arr的内容为:

 


解决方法:

1.用gets()函数,即使中间有空格也会读取

#include <stdio.h>
int main()
{
	char arr[100];
	printf("获取字符\n");
	gets(arr);

	printf("\narr字符串的内容为:%s\n",arr);

	return 0;
}

运行结果:

 

 


2.用fgets()函数     

 gets(arr,100,stdin)

用法:fgets(读取的字符放大位置(如要放入arr里),限制最多读取多少(如限制最多读取100字符,在哪里读取(如从键盘上获取stdin));

stdin——>标准输入—键盘;

注意:fgets会把(\n)回车作为字符获取;如果\n影响代码实现,不想要\n,可以在读取后,计算字符串长度然后将最后一个字符换为\0;

#include <stdio.h>

int main()
{
	char arr[100];
	printf("获取字符\n");
	fgets(arr,100,stdin);

	printf("\narr字符串的内容为:%s\n", arr);

	return 0;
}

 删去\n:

#include <stdio.h>

int main()
{
	char arr[100];
	printf("获取字符\n");
	fgets(arr,100,stdin);
	//计算字符串长度(不用sizeof的原因在在其他博客作品
	//”strlen和sizeof的区别及用法中“有写过)
	int len = strlen(arr);
	//将最后一个字符\n用\0取代,从而删去\n
	arr[len - 1] = '\0';

	printf("\narr字符串的内容为:%s\n", arr);

	return 0;
}

效果:


3.用scanf("%[^\n]s")读取也可以达到同样的效果

加了[^\n]——>意思是一直读取,直到遇到 \n (回车),即使中间有空格

#include <stdio.h>
int main()
{
	char arr[100];
	printf("获取字符\n");
	while (scanf("%[^\n]s", &arr) != EOF)
	{
		;
	}
	printf("\narr字符串的内容为:%s\n", arr);

	return 0;
}

运行结果:(不会像最前面那样遇到空格就停止读取)

 



二.字符串倒置代码的实现:

因为后面单词的倒置和字符串的倒置相同,所以这里分装一个函数 ReversrArr( ) 来实现倒置;

这里参数只需将字符串的初末元素地址传入,用指针char* left  和char* right接收

数组名即首元素地址,容易得到;

末元素地址可以用strlen(arr)函数得到长度,再用(arr+长度-1)得到;

 

字符串倒置的代码实现:

//字符串倒置代码实现
void ReverseArr(char* left, char* right)
{
	while (left < right)
	{
		char tmp = *left;//中间变量
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
#include <stdio.h>
#include <string.h>

int main()
{
	char arr[100];
	printf("获取字符\n");
	gets(arr);
	//计算字符串的长度
	int len = strlen(arr);
    //倒置字符串
	ReverseArr(arr,arr+len-1);

	printf("%s\n",arr);

	return 0;
}

运行结果:



 三.每个单词的倒置代码实现:

我们要用前面的 ReverseArr()需要知道每个单词的起始leftright

由于每个单词用 空格 隔开的,所以我们可以用 空格 来作为遍历条件

 

代码实现:

//每个单词的倒置
	char* start = arr;
	char* end = arr;

	while (*end != '\0')
	{
		while (*end != ' ' && *end != '\0')
		{
			end++;
		}
		ReverseArr(start, end-1);
		start = end + 1;
		if (*end == ' ')
		{
			end++;
		}
	}



整个代码的实现:

//字符串倒置代码实现
void ReverseArr(char* left, char* right)
{
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
#include <stdio.h>
#include <string.h>

int main()
{
	char arr[100];
	printf("获取字符\n");
	gets(arr);
	/*printf("%s\n",arr);*/
	//计算字符串的长度
	int len = strlen(arr);
	ReverseArr(arr,arr+len-1);
	/*printf("%s\n",arr);*/
	//每个单词的倒置
	char* start = arr;
	char* end = arr;

	while (*end != '\0')
	{
		while (*end != ' ' && *end != '\0')
		{
			end++;
		}
		ReverseArr(start, end-1);
		start = end + 1;
		if (*end == ' ')
		{
			end++;
		}
	}
	printf("%s\n",arr);

	return 0;
}

运行结果:

 


知识点总结:

1.该算法思想

2.字符串输入(获取)的3种方法

       1.  scanf("%[^\n]s",&arr)   注意:scanf("%s",&arr)遇到空格会停止读取    

加了[^\n]——>意思是一直读取,直到遇到 \n (回车),即使中间有空格

       2.gets(arr)    可以读取空格

       3.fgets(arr,100,stdin)   

           arr --->读取的文本放在哪里(arr)

          100--->读取的最大限制

          stdin--->标准输入----键盘

          注意:fgets会把(\n)回车作为字符获取;如果\n影响代码实现,不想要\n,可以在读取                后,计算字符串长度然后将最后一个字符换为\0;删除方法示例在前面fgets处

3.倒置字符串和单词的方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/581403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3588平台开发系列讲解(项目篇)RKNN-Toolkit2 的使用

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、RKNN-Toolkit2安装二、模型转换和模型推理三、性能和内存评估沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 NPU 是专门用于神经网络的处理单元。它旨在加速人工智能领域的神经网络算法,如机器视觉和自…

c#快速入门(2)

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析2 目录 &#x1f449;&#x1f3fb;类、对象、类成员简介&#x1f449;&#x1f3fb;语句…

chatgpt赋能python:Python的不断循环:了解你需要知道的

Python的不断循环&#xff1a;了解你需要知道的 Python是一个流行的编程语言&#xff0c;它被许多开发者用于构建各种应用程序和工具。 在Python中&#xff0c;有一个常见的编程概念&#xff0c;它被称为“循环”。 循环可以让程序在不停止执行的情况下重复执行一些代码。 在本…

人体行为足力特征分析及其应用研究_kaic

第一章 绪论 随着社会现代化的发展和科技的不断进步&#xff0c;我国航天事业蓬勃发展&#xff0c;与此同时产生了很多亟待解决的难题&#xff0c;康复医疗成为航天医学和康复领域的重要课题之一。载人航天实践证明&#xff0c;失重对航天员生理功能有很大影响&#xff0c;这不…

(2020)高频成分有助于解释卷积神经网络的泛化

High-frequency Component Helps Explain the Generalization of Convolutional Neural Networks 公众号&#xff1a;EDPJ 目录 0. 摘要 1. 简介 2. 相关工作 3. 高频成分 & CNN 的泛化 3.1 CNN 利用高频成分 3.2 鲁棒性和准确性之间的权衡 4. 在重新思考泛化之前…

安装远程软件rustdesk中报错 Error! Could not locate dkms.conf file. File: does not exist.

解决方法 省流&#xff1a;uname -r 查看当前内核&#xff0c;找到/usr/src/目录下的多余的内核文件&#xff0c;删除残留多余的内核文件 原因可能是当时安装nvidia显卡驱动的时候没删除掉旧的内核文件&#xff0c;某些模块或驱动程序可能与特定内核版本相关联&#xff0c;如…

chatgpt赋能python:Python中5!怎么算的?一篇简易教程

Python中5&#xff01;怎么算的&#xff1f;一篇简易教程 在Python中&#xff0c;可以使用一段小小的代码来进行阶乘的计算。本篇文章将带领您了解如何使用Python计算5的阶乘&#xff0c;为您的程序设计带来便利。 介绍 计算阶乘是一项非常基础的数学计算&#xff0c;它常常…

django+python协同过滤推荐算法网上购物商城系统的n9u33

本毕业设计的内容是设计实现一个基于 Django框架的智能推荐算法。它是以 Python语言&#xff0c;MYSQL为数据库开发平台&#xff0c;Tomcat网络信息服务作为应用服务器。智能推荐算法的功能已基本实现&#xff0c;主要包括用户、商品分类、购物商品、订单等。本项目软件架构选择…

《数据库应用系统实践》------ 包包销售系统

系列文章 《数据库应用系统实践》------ 包包销售系统 文章目录 系列文章一、需求分析1、系统背景2、 系统功能结构&#xff08;需包含功能结构框图和模块说明&#xff09;3&#xff0e;系统功能简介 二、概念模型设计1&#xff0e;基本要素&#xff08;符号介绍说明&#xff…

vector的实现(c++)

前言 vector是很重要的数据结构&#xff0c;所以了解它的底层的核心原理是很有必要的&#xff0c;如何了解它的底层原理呢&#xff1f;除了阅读原码外&#xff0c;自己实现一下vector的核心逻辑也是不错的选择。 目录 1.四个默认成员函数 2.迭代器的实现 3.增删查改 4. 容…

栈踩踏实验

程序的存储结构 分布 在磁盘和内存中的分布如下&#xff1a; 节视图 .data&#xff1a;已经初始化的全局变量/局部静态变量 .bss&#xff1a;未初始化的全局变量/局部静态变量 .got.plt&#xff1a;全局偏移量表&#xff0c;保存全局变量引用的地址 .rodata&#xff1a;只读…

2023 Idea 热部署 JRebel 插件激活方法

2023 Idea 热部署 JRebel 插件激活方法 1. 下载源代码 进入下面 github 地址 clone 代码到本地 https://github.com/Byron4j/JrebelLicenseServerforJava 2. 编译和打包 cd /Users/daixiaohu/Desktop/JrebelLicenseServerforJavamvn clean package3. 运行项目 cd target/jav…

前端项目搭建以及项目配置

前端项目搭建 - vitevue3.0ant vite比起webpack速度更快 vite搭建项目 https://cn.vitejs.dev/ 步骤&#xff1a; 1.打开cmd 2.找到项目应该建的文件夹 比如直接建到桌面上 cd desktop3.创建项目 使用创建项目命令&#xff0c;然后根据提示填写项目名称&#xff0c;以及要…

计算机视觉基础:锚框

锚框 目标检测算法通常会在输入图像中采样大量的区域&#xff0c;然后判断这些区域中是否包含我们感兴趣的目标&#xff0c;并调整区域边界从而更准确地预测目标的真实边界框&#xff08;ground-truth bounding box&#xff09;。 不同的模型使用的区域采样方法可能不同。 这里…

KVM网络桥接模式底层网络原理解说

文章目录 前言一、tap设备在kvm中的应用1. tap虚拟网络设备2. Tap/Tun工作原理3. 结论 二、KVM网络桥接模式细节解说1.查看虚拟网卡2.vnet虚拟网卡说明 总结 前言 在以下两篇文章中我们介绍了虚拟网卡技术以及虚拟交换机技术&#xff0c;今天我们再来详细说说在在kvm网络模式下…

chatgpt赋能python:为什么Python在SEO中不见了?

为什么Python在SEO中不见了&#xff1f; Python是众所周知的一种流行的编程语言&#xff0c;它被广泛地用于各种应用程序&#xff0c;从人工智能和机器学习到数据科学和Web应用程序。然而&#xff0c;在最近的一次更新中&#xff0c;有些人注意到Python似乎在搜索引擎优化&…

【LAMP平台建构】

一.LAMP介绍 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词&#xff0c;具体包括Linux操作系统、Apache网站服务器、MySQL数据库服务器、PHP&#xff08;…

使用JS来实现tab栏切换

这是我今天从学习的知识点&#xff0c;今天试着做了一个tab栏切换&#xff0c;学到很多的知识点&#xff0c;讲师也比学校的老师讲的更加详细明白 个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大一在校生&#xff0c;web前端开发专业 &#x1f921; 个人主页…

c#快速入门

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析2 目录 &#x1f449;&#x1f3fb; c#和c不同之处&#x1f449;&#x1f3fb;程序文件的…

三门问题的实验验证:贝叶斯概率公式实战

引言 数理统计与概率论经常出现在我们的日常生活中&#xff0c;如果能灵活掌握&#xff0c;可以起到很大的帮助。下面通过几个经典问题的探讨&#xff0c;浅入深出&#xff0c;更加深刻的理解贝叶斯全概率公式和贝叶斯公式的作用。 我的最深的体会就是&#xff0c;当某些已发生…