翻转单词
2014-11-07 20:54
92 查看
由前一篇文章交换内存得到:
输入:student. a am i
输出:i am a student.
输入:student. a am i
输出:i am a student.
#include <iostream> #include <cstring> using namespace std; void *reversem (void * pointer,const size_t mem_n); void *reverse_adjacent_m(void * pointer,const size_t head_size,const size_t total_size); void *reverse_non_adjacent_m(void * pointer,const size_t head_size,const size_t end_size,const size_t total_size); int main(void) { char str[50001]; cin.getline(str,50001); int head=0,end=0; int N=strlen(str); for(int j=0;j<N;j++) { if(str[j]==' '&&str[j-1]!=' ') { head=j-1; } if(str[j]==' '&&str[j+1]!=' ') { end=j+1; } if(str[head+1]==' '&&str[end-1]==' ') { reverse_non_adjacent_m(str,head+1,N-end,N); //cout<<N<<' '<<head<<' '<<end<<endl; N=N-end; head=end=0; j=-1; } } for (size_t i=0;i<strlen(str);i++) cout<<str[i]; cout<<endl; return 0; } void *reversem (void * pointer,const size_t mem_n) { if(pointer==NULL) return pointer; if(mem_n<2) return pointer; char *beg=static_cast<char*>(pointer); char *end=beg+mem_n-1; char tmp; for(;beg<end;beg++,end--) { tmp=*beg; *beg=*end; *end=tmp; } return pointer; } void *reverse_adjacent_m(void * pointer,const size_t head_size,const size_t total_size) { if(pointer==NULL) return pointer; if(total_size<2) return pointer; char *beg=static_cast<char*>(pointer); char *mid=beg+head_size; reversem(beg,head_size); //char *end=beg+total_size-1; reversem(mid,total_size-head_size); reversem(beg,total_size); return pointer; } void *reverse_non_adjacent_m(void * pointer,const size_t head_size,const size_t end_size,const size_t total_size) { if(pointer==NULL) return pointer; if(total_size<3) return pointer; if(head_size>=total_size||end_size>=total_size) return pointer; if(total_size<(head_size+end_size)) return pointer; char *beg=static_cast <char*> (pointer); reversem(beg,head_size); reversem(beg+total_size-end_size,end_size); reversem(beg,total_size); return pointer; }
相关文章推荐
- 程序员面试题精选100题(07)-翻转句子中单词的顺序[算法]
- 算法习题10:翻转句子中单词的顺序
- 翻转单词顺序
- 翻转句子中单词的顺序和字符串的旋转操作 c++面试题
- 【剑指offer系列】 翻转单词 VS 左旋字符串___42
- Microsoft100——10.翻转单词
- 剑指offer系列之42:翻转单词序列
- 翻转单词顺序列
- [剑指offer]翻转单词顺序列
- 面试题42:翻转单词顺序
- 剑指offer39--翻转单词和左旋转字符串
- JAVA用标准库自己写一个字符串翻转方法,翻转字符串中字母非单词
- 面试题42:翻转单词顺序(句子反转)
- 字符串中单词的翻转(二)
- 剑指offer—翻转单词顺序列
- LeetCode刷题:Reverse Words in a String(翻转字符串中的单词)
- 【44】翻转单词顺序列
- 翻转句子中单词的顺序
- 翻转单词顺序列
- 剑指offer42:翻转单词顺序 VS 左旋转字符串(更高效、简便的解法)