ODOA(1) 翻转句子中单词的顺序(C语言实现)

本文介绍了一种通过C语言实现的算法,该算法能够翻转一个英文句子中单词的顺序,同时保持每个单词内部字符的原有顺序。通过示例演示了如何将“I am a student.”转换为“student. a am I”。

今天先做一个简单的问题。


问题描述:

翻转句子中单词的顺序

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理

例如:输入“I am a student.”,则输出“student.a am I”。


[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /* 
  2.   Name: reverse.h 
  3.   Author: suzhou 
  4.   Date:   2014.02.12 
  5.   Num.    1 
  6.  */  
  7.   
  8.   
  9. #include"stdio.h"  
  10. #include"string.h"  
  11.   
  12. void reverseStr(char* str, int i, int j);  
  13. void reverseWords(char* str);  

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /* 
  2.   File: wordsreverse.c 
  3.   Author: suzhou 
  4.   Date:   2014.02.12 
  5.   Num.    1 
  6.   Question: 
  7.   翻转句子中单词的顺序。 
  8.   题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 
  9.   句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 
  10.   例如输入“I am a student.”,则输出“student.a am I”。 
  11.  */  
  12.   
  13. #include"reverse.h"  
  14.   
  15. /* 字符串反转 
  16.  */  
  17. void reverseStr(char* str, int i, int j)  
  18. {  
  19.     for (; i < j; i++, j--)  
  20.     {  
  21.         char tmp;  
  22.         tmp = str[i];  
  23.         str[i] = str[j];  
  24.         str[j] = tmp;  
  25.     }  
  26.     return ;  
  27. }  
  28.   
  29. /* 句子反转 
  30.  */  
  31. void reverseWords(char* str)  
  32. {  
  33.     int i = 0;  
  34.     char* subStrStart;  
  35.     char* subStrEnd;  
  36.     char* currentPos;  
  37.   
  38.     currentPos = str;  
  39.     while(*currentPos!='\0')  
  40.     {  
  41.         subStrStart = currentPos;  
  42.         while(*currentPos!=' ' && *currentPos!='\0')  
  43.             currentPos++;  
  44.         subStrEnd = currentPos - 1;  
  45.         reverseStr(str, (int)(subStrStart - str), (int)(subStrEnd - str));  
  46.         currentPos++;     
  47.     }  
  48.     return;  
  49. }  
  50.   
  51.   
  52. int main()  
  53. {  
  54.     char str[20] = "I am a student.";  
  55.     reverseStr(str, 0, strlen(str)-1 );  
  56.     reverseWords(str);  
  57.     printf("%s\n", str);  
  58.     return 0;  
  59. }  


不要认为实现这类基础算法是“重复造车轮”,能说这句话的前提条件是自己有造车轮的能力。好好打牢基础才是现阶段的关键任务。

转摘:http://blog.youkuaiyun.com/zs634134578/article/details/19136097

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值