题目描述:
JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
输入:
每个测试案例为一行,表示一句英文句子。
我们保证一个句子的单词数不会超过600,每个单词的长度也不会超过30。但是需要注意的是Fish是个不拘小节的人,有时候两个单词中间可能会有很多空格。为了方便起见,你可以认为一行的字符总数不会超过50000个,标点符号可以和普通字母一样处理。
输出:
对应每个测试案例,把翻转后的正确的句子单独输出一行。
样例输入:
student. a am I
I'm a Freshman and I like JOBDU!
样例输出:
I am a student.
JOBDU! like I and Freshman a I'm
【解析】
【代码】
/*********************************
* 日期:2013-11-29
* 作者:SJF0115
* 题号: 题目1361:翻转单词顺序
* 来源:http://ac.jobdu.com/problem.php?pid=1361
* 结果:AC
* 来源:剑指Offer
* 总结:
**********************************/
#include <stdio.h>
#include <malloc.h>
#include <string.h>
char *words;
//反转单词
void ReverseWord(char* words,int begin,int end){
int temp;
if(words == NULL || begin > end || begin < 0){
return;
}
//反转
while(begin < end){
temp = words[begin];
words[begin] = words[end];
words[end] = temp;
begin ++;
end --;
}
}
char* Reverse(char *words){
int i;
if(words == NULL){
return NULL;
}
int len = strlen(words);
//反转整个句子
ReverseWord(words,0,len-1);
//逐个反转单词
int begin = 0,end = 0,isFirst = 0;//begin 单词第一个字母下标 end 单词最后一个字母下标isFirst 判断是不是单词后第一个空格
for(i = 0;i <= len;i++){
//空格
if(isFirst == 0 && words[i] == ' '){
begin = end = i+1;
}
//单词后第一个空格或者一个句子的结束
else if((isFirst == 1 && words[i] == ' ')|| words[i] == '\0'){
ReverseWord(words,begin,end);
begin = end = i+1;
isFirst = 0;
}
//单词
else{
end = i;
isFirst = 1;
}
}
return words;
}
int main() {
int i,n;
words = (char*)malloc(sizeof(char)*50001);
while(gets(words)){
words = Reverse(words);
for(i = 0;i < strlen(words);i++){
printf("%c",words[i]);
}
printf("\n");
}//while
return 0;
}
分享到:
相关推荐
# Python实现《剑指offer》 部分代码自己添加了一些测试用例, 或者自己添加了一些功能 1. 初级程序员注重算法和数据结构 2. 事先做好准备,对工作有热情 3. 面试过程放松。不要急于写代码,了解清楚所要解决的问题,...
剑指offer(C++)1
剑指offer刷题笔记(一),大概完成40多道题,语言c++,python,java
牛客网剑指offer——Java题解.pdf
提供剑指offer 名企面试官精讲典型编程题和一套编程题的源代码。
剑指offer例题代码 不想看书可以直接看代码 学完了找工作、机试、考研都不会有问题 剑指offer例题代码 不想看书可以直接看代码 学完了找工作、机试、考研都不会有问题 剑指offer例题代码 不想看书可以直接看代码 ...
《剑指Offer》题目及代码,基于java语言实现;
剑指offer的Java代码全套加文字说明
《剑指Offer》 1. 赋值运算函数 2. 单例设计模式 3. 二维数组中查找目标值 4. 替换字符串中的空格 5. 从尾到头打印链表 6. 由前序和中序遍历重建二叉树 7. 用两个栈实现队列 8. 求旋转数组的最小数字 9. ...
此程序为剑指offer程序,便于找工作的小伙伴的复习~
最全的《剑指offer》Java版代码实现,保证正确性,全都在OJ上测试AC了。
因为剑指offer上的面试题有些写的有错误,这是实现了剑指offer中面试题的代码
剑指offer
包含剑指offer全部代码,用VS打开,直接可以运行所有代码
比如输入字符串"abcdefg"和数字2,该函数将返回左旋转2位得到的结果"cdefgab"实验平台:牛客网解决思路:题一的解题思路:题一用了2种方式,第一种j
java版剑指Offer,主要用于找工作的资料,数据结构的java语言实现
剑指offer,对于算法初学者和求职者是个不错的选择。
剑指offer源代码解析剑指offer源代码解析剑指offer源代码解析
剑指 offer 题解.pdf
剑指offer剑指offer