用C语言编写以下程序给定一个字符串,翻转该字符串,翻转时单词中的字符顺序不变。例如,如果字符串为"Hello World",则翻转后为"World Hello"。单词间以一个或多个空格分隔。注意,字符串开头和结尾都可能有多个空格。输出时去掉多余的空格。只在每个单词之间以1个空格间隔。输出的每行末尾没有空格。 输入格式: 输入可能包括多行。每行代表一个字符串,除了空格外,标点符号和普通字母一样处理。你可以认为一行的字符总数不会超过50000个,单词数不会超过600,每个单词的长度也不会超过30。 输出格式: 输出包括多行,每行对应输入的一行,为翻转后的字符串。输出时去掉多余的空格。只在每个单词之前以1个空格间隔。输出的每行末尾没有空格。 输入样例: 在这里给出一组输入。例如: student. a am I World Hello 输出样例: 在这里给出相应的输出。例如: I am a student. Hello World

时间: 2024-02-12 17:10:01 浏览: 30
以下是C语言的实现代码: ```c #include <stdio.h> #include <string.h> #define MAXN 50010 #define MAXM 610 char s[MAXN]; char words[MAXM][30]; // 存储每个单词 int len[MAXM]; // 存储每个单词的长度 int main() { while (fgets(s, MAXN, stdin)) { int n = strlen(s); if (s[n-1] == '\n') s[n-1] = '\0'; // 去掉换行符 int cnt = 0; // 记录单词个数 n = strlen(s); for (int i = 0, j = 0; i < n; i++) { if (s[i] == ' ') { if (j) cnt++; // j 不为 0 表示 j 到 i-1 是一个单词 j = 0; } else { words[cnt][j++] = s[i]; } } if (j) cnt++; // 处理最后一个单词 for (int i = 0; i < cnt/2; i++) { // 翻转单词 char temp[30]; strcpy(temp, words[i]); strcpy(words[i], words[cnt-i-1]); strcpy(words[cnt-i-1], temp); } for (int i = 0; i < cnt; i++) len[i] = strlen(words[i]); // 记录每个单词的长度 int p = 0; for (int i = 0; i < cnt; i++) { // 输出结果 printf("%s", words[i]); p += len[i]; while (p < n && s[p] == ' ') p++; if (p < n) printf(" "); p++; } printf("\n"); } return 0; } ``` 该程序通过 `fgets()` 函数读入多行字符串,然后对于每行字符串进行处理。 对于每行字符串,我们首先将其分割成若干个单词,并存储在 `words` 数组中。为了方便处理,我们记录每个单词的长度,存储在 `len` 数组中。我们使用 `cnt` 变量记录单词的个数。 然后,我们翻转 `words` 数组中的单词,即将 `words[0]` 和 `words[cnt-1]` 交换,`words[1]` 和 `words[cnt-2]` 交换,以此类推。 最后,我们输出翻转后的结果。对于每个单词,我们首先输出它本身,然后检查原始字符串中单词后面的空格。如果有多个空格,我们只输出一个空格。输出结束后,我们记得换行。 需要注意的是,我们使用 `fgets()` 函数读入字符串,该函数会将换行符也读入,因此我们需要将字符串中的换行符去掉。 该程序的时间复杂度为 $O(Tn)$,其中 $T$ 是字符串的行数,$n$ 是字符串的总长度。

相关推荐

最新推荐

recommend-type

数据库实验.py

数据库实验.py
recommend-type

机器学习技术对心电图 (ECG) 信号进行分类matlab代码.zip

1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
recommend-type

学会学习心理课拒绝诱惑:自制力培养手册.docx

学会学习心理课拒绝诱惑:自制力培养手册.docx
recommend-type

基于matlab+Simulink模拟的微电网系统包括包括电源、电力电子设备等+源码+开发文档(毕业设计&课程设计&项目开发)

基于matlab+Simulink模拟的微电网系统包括包括电源、电力电子设备等+源码+开发文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 项目简介: 这是一个完整的微电网模型,包括电源、电力电子设备、使用MatLab和Simulink的负载和电源模型。该模型基于费萨尔·穆罕默德的硕士论文《微网格建模与仿真》。 什么是微电网 模拟的微电网使用一组电源和负载在与任何集中式电网(宏电网)断开连接的情况下工作,并自主运行,为其局部区域提供电力。该仿真对微电网在稳态下进行建模,以分析其对输入变化的瞬态响应。 此模拟的目的 对系统进行全年模拟,测量负载、产量、电压和频率。 给出简化规划和资源评估阶段的方法。
recommend-type

Translucent Image - Fast Blurred Background UI v4.4.1

Unity插件 Translucent Image 可帮助你构建精美的模糊背景 UI,例如在 iOS/MacOS/Windows 10 Fluent 设计中的 UI。 与许多其他背景模糊解决方案不同,Translucent Image 采用一种对性能影响最小的高效算法,因此用户可以享受更高的帧速率和更长的电池寿命。不仅如此,当你将模糊调高时,它还可以产生完美的平滑效果,而其它资源在高度模糊时会呈现难看的块状图像。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SQL怎么实现 数据透视表

SQL可以通过使用聚合函数和GROUP BY子句来实现数据透视表。 例如,假设有一个销售记录表,其中包含产品名称、销售日期、销售数量和销售额等信息。要创建一个按照产品名称、销售日期和销售额进行汇总的数据透视表,可以使用以下SQL语句: ``` SELECT ProductName, SaleDate, SUM(SaleQuantity) AS TotalQuantity, SUM(SaleAmount) AS TotalAmount FROM Sales GROUP BY ProductName, SaleDate; ``` 该语句将Sales表按照ProductName和SaleDat
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。