【7】翻转单词顺序

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字符一样处理。例如输入字符串"I am a student." 翻转后为"student. a am I"

方法:第一步翻转句子中的所有字符;第二步再翻转每个单词的顺序。

注意一个问题:

char *str = "abc",这个时候字符串"abc"是存储在常量区,所以这个时候字符指针不能对字符串常量做任何的修改

char str[] = "abc”,这个时候字符串存储在字符数数组中,不再是常量所以字符指针可以对字符数组进行修改

/*
注意
1. char *p = "abc",这个时候字符串"abc"为字符串常量不允许修改
2. 如果我们要翻转字符串必须把字符串存储到字符数组中
   char string[] = "abc",这个时候abc就不是字符串常量了可以修改
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

//翻转单词
void ReverseWord(char *begin, char *end){
	if(begin == NULL || end == NULL){
	    return;
	}
	//翻转
	while(begin < end){
        swap(*begin, *end);//交换两个位置的字符
		++begin;
		--end;
	}
}

//翻转字符串句子
char *ReverseString(char *string){
	if(string == NULL){ //空字符串
	    return NULL;
	}
	//设置两个指针一个指向首地址一个指向最末尾
	int len = (int)strlen(string);
	char *begin = string;
	char *end = string+len-1;
	//翻转整个字符串
	ReverseWord(begin, end);
	//翻转单词
	begin = string;
	end = string;
        //枚举字符串句子把单词翻转过来
	while(*end != '\0'){
		//如果碰到了空格就把前面的单词翻转
		if(*end == ' '){
		    ReverseWord(begin, end-1); //注意这边是end-1
		    ++end;
		    begin = end;
		}
		else {
		    end++;
		}
	}
	//最后把剩下的也翻转了
	ReverseWord(begin, end-1);
	return string;
}
时间: 2024-11-09 01:43:41

【7】翻转单词顺序的相关文章

如何翻转单词顺序

题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,"student. a am I".后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是"I am a student.".Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 输入: 每个测试案例为一行,表示一句英文句子. 我们保证一个句子的单词数不会超过600

剑指Offer之翻转单词顺序

题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,"student. a am I".后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是"I am a student.".Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 输入: 每个测试案例为一行,表示一句英文句子. 我们保证一个句子的单词数不会超过600

C++实现翻转单词顺序_C 语言

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.句子中单词以空格符隔开.为简单起见,标点符号和普通字母一样处理.例如输入"I am a student.",则输出"student. a am I". 思路:首先将整个句子按字符翻转,然后再将其中每个单词的字符旋转. #include <string> #include "stdafx.h" void Reverse(char *pBegin, char *pEnd

剑指offer系列之四十四:翻转单词顺序

题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,"student. a am I".后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是"I am a student.".Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 可以发现,要对一个句子进行翻转,可以先对整个句子进行翻转,之后再对每个单词进行翻转.而不论是返

c++-C++版单词反转 给出一个英语句子,希望你把句子里的单词顺序都翻转过来

问题描述 C++版单词反转 给出一个英语句子,希望你把句子里的单词顺序都翻转过来 题目描述 Description给出一个英语句子,希望你把句子里的单词顺序都翻转过来 输入描述 Input Description输入包括一个英语句子. 输出描述 Output Description按单词的顺序把单词倒序输出 样例输入 Sample InputI love you 样例输出 Sample Outputyou love I 数据范围及提示 Data Size & Hint简单的字符串操作 解决方案

C语言左旋转字符串与翻转字符串中单词顺序的方法_C 语言

左旋转字符串题目: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串 abcdef  左旋转 2  位得到字符串 cdefab.请实现字符串左旋转的函数. 要求时间对长度为 n  的字符串操作的复杂度为 O(n),辅助内存为 O(1). 分析: 网上看到解法很多种,就不详细说明了. 我采用的是数组不对称的交换时间复杂度应该是O(n). 代码实现(GCC编译通过): #include "stdio.h" #include "stdlib.h&qu

编写可以打开文本文件并打乱在该文件中所找到的单词顺序的vbs脚本_vbs

问: 您好,脚本专家!我女儿有一种闪卡式程序,它能够获取文本文件中的单词列表.我如何编写一个脚本,使其能够打开该文件并自动打乱单词列表的顺序呢? -- SN 答: 您好,SN.您知道,大多数情况下,我们尽力使此专栏关注实际的系统管理任务:我们告诉您如何设置默认打印机.如何禁用服务以及如何映射网络驱动器.不过,有时我们也愿意处理那种听起来就很有趣的问题,而最终的结果有多大用处我们是不会去考虑的.系统管理员通常需要打乱文本文件中单词列表的顺序吗?可能不需要.但是,若是只工作,不玩耍,想必聪明的小孩也

字母顺序颠倒而单词顺序不变的php代码_php技巧

php面试题说明 : 例如:my name is fanglor => ym eman si orlgnaf php面试题的答案: 复制代码 代码如下: function restr ($str) { $str1 = explode (' ',$str); $str2 = ''; $temp = ''; for ($i=0;$i<count ($str1);$i++) { $str2 .= $temp.strrev ($str1[$i]); $temp = ' '; } return $str

str-将英文句子翻转,求教哪里错了!

问题描述 将英文句子翻转,求教哪里错了! 下面是代码,请大神看看,方法是先把每个翻转再将整句句子翻转. 输入的是the sky is blue,应该出来的是blue is the sky,但现在出来的是elub is the sky #include #include void Reverse(char* str) { char *p; char *start,*end;//单词头尾指针 char temp; int flag=0;//如果p指向符号为1 start=p=str;//头指针指向数