题目描述
给定一段英文文章片段,由若干单词组成,单词间以空格间隔,单词下标从0开始。
请翻转片段中指定区间的单词顺序并返回翻转后的内容。例如给定的英文文章片段为"I am a developer",翻转区间为[0,3],则输出“developer a am I”。
String reverseWords(String s, int start, int end)
输入描述
使用换行隔开三个参数
- 第一个参数为英文文章内容即英文字符串
- 第二个参数为待翻转内容起始单词下标
- 第三个参数为待翻转内容最后一个单词下标
输出描述
翻转后的英文文章片段所有单词之间以一个半角空格分隔进行输出。
作者:不进大厂不改名_被占用
链接:https://juejin.cn/post/7298635806494113811
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。示例1
输入∶
l am a developer.
1
2
输出:
l a am developer.
示例2
输入∶
Hello world!
0
1
输出:
world! Hello
说明:
输入字符串可以在前面或者后面包含多余的空格,但是反转后的不能包含多余空格。
示例3
输入∶
I am a developer.
0
3
输出:
developer. a am l
说明:
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
示例4
输入:
Hello!
0
3
输出:
Hello!
说明:
指定反转区间只有一个单词,或无有效单词则统—输出原字符串。
————————————————版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_31076523/article/details/134808769
一、问题分析
首先读题,仔细看描述中的内容,发现需求是
1.输入一个英文文章片段,
2.翻转指定区间的单词顺序,
3.标点符号和普通字母一样处理
4.输入描述:使用换行隔开三个参数
5.第一个参数为英文文章内容,即英文字符串
6.第二个参数为翻转起始单词下标,下标从0开始
7.第三个参数为结束单词下标
8.输出描述:反转后的英文文章片段,所有单词之间以一个半角空格分隔进行输出
二、解题思路
1. 首先定义一个char str[1000];用来读取字符串
2.然后定义两个整数int start, end;用来读取翻转的起始和结束位置
3.从字符串开始到start,正常输出单词
4.到start之后,定义一个字符串数组,char temp[end - start][100];
5.使用字符串数组,从后往前end-start到0读取单词
6.然后从0到end-start,输出temp
7.然后end到字符串末尾,正常输出单词。
三、具体步骤
使用的语言是C
#include <stdio.h>
#include <string.h>int main() {char str[1000];int start = 0, end = 3;fgets(str, sizeof(str), stdin);str[strcspn(str, "\n")] = '\0';scanf("%d\n%d", &start, &end);// printf("The input string is :%s\n", str);char *temp = strtok(str, " ");for(int i = 0; i < start; i++) {printf("%s ", temp);temp = strtok(NULL, " ");}int len = end - start + 1;char tempreverse[len][100];for(int i = len - 1; i >= 0; i--) {strcpy(tempreverse[i],temp);temp = strtok(NULL, " ");}for(int i = 0; i < len; i++) {printf("%s ", tempreverse[i]);}while(temp != NULL) {printf("%s", temp);temp = strtok(NULL, " ");if(temp != NULL) {printf(" ");}}return 0;
}