【7】翻转单词顺序
2014-05-24 22:53
246 查看
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字符一样处理。例如输入字符串"I am a student." 翻转后为"student. a am I"
方法:第一步翻转句子中的所有字符;第二步再翻转每个单词的顺序。
注意一个问题:
char *str = "abc",这个时候字符串"abc"是存储在常量区,所以这个时候字符指针不能对字符串常量做任何的修改
char str[] = "abc”,这个时候字符串存储在字符数数组中,不再是常量所以字符指针可以对字符数组进行修改
方法:第一步翻转句子中的所有字符;第二步再翻转每个单词的顺序。
注意一个问题:
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; }
相关文章推荐
- 算法题目---翻转单词顺序 VS 左旋转字符串
- 2014-04-09 单词内部翻转,顺序不变(谷歌面试题)
- 翻转单词顺序VS左旋转字符串
- C 实现英语句子翻转 单词字母顺序不变(i love you -----> you love i)
- 每天学习一点编程(2)(输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变)
- ODOA(1) 翻转句子中单词的顺序(C语言实现)
- 【100题】翻转句子中单词的顺序
- 翻转句子中单词的顺序
- C++实现翻转单词顺序
- 面试算法(四十二)翻转单词顺序VS左旋转字符串
- 【剑指offer】之翻转单词顺序
- IT公司100题-10-翻转句子中单词的顺序
- 翻转句子中单词的顺序
- 题目1361:翻转单词顺序
- 翻转句子中单词的顺序
- 翻转单词的顺序列
- 剑指offer——翻转单词顺序VS左旋转字符串
- 10.翻转句子中单词的顺序
- 翻转句子中单词的顺序
- 【剑指Offer学习】【面试题42:翻转单词顺序vs左旋转字符串】