c语言翻转一个英文句子
2016-05-27 21:32
633 查看
思路:先把整个句子翻转一次,再用空格分割,翻转单个单词
测试
root@ubuntu15:work# ./a.out
root@ubuntu15:work# ./a.out “”
root@ubuntu15:work# ./a.out “123”
123
123
root@ubuntu15:work# ./a.out “1 2 3 4 5”
1 2 3 4 5
5 4 3 2 1
root@ubuntu15:work# ./a.out “12 345 6789 11111”
12 345 6789 11111
11111 6789 345 12
#include <stdio.h> #include <stdlib.h> #include <string.h> /* 翻转一个字符串从start位置到end位置的字符 */ char *reverse_string(char *start, char *end) { char tmp; char *back = start; if(!start || !end) return NULL; while(start < end) { tmp = *start; *start = *end; *end = tmp; start++; end--; } return back; } /* 翻转一串单词 */ char *reverse_words(char *words) { char *pstart, *pend; if(!words) return NULL; /* 翻转整个句子 */ pstart = pend = words; while(*pend++); pend -= 2; reverse_string(pstart, pend); /* 翻转单词 */ pstart = pend = words; while(*(pend + 1)) { pend = pstart; while(*pend != ' ' && *pend != 0) pend++; pend--; reverse_string(pstart, pend); pstart = pend + 2; } return words; } int main(int argc, char const *argv[]) { char s[1024]; if(2 == argc) { strncpy(s, argv[1], sizeof(s)); printf("%s\n", s); reverse_words(s); printf("%s\n", s); } return 0; }
测试
root@ubuntu15:work# ./a.out
root@ubuntu15:work# ./a.out “”
root@ubuntu15:work# ./a.out “123”
123
123
root@ubuntu15:work# ./a.out “1 2 3 4 5”
1 2 3 4 5
5 4 3 2 1
root@ubuntu15:work# ./a.out “12 345 6789 11111”
12 345 6789 11111
11111 6789 345 12
相关文章推荐
- Linux C函数参考手册(PDF版)
- C# partial关键字说明
- Lua教程(十七):C API简介
- 简单谈谈lua和c的交互
- C#中的委托数据类型简介
- C#编写的艺术字类实例代码
- C#实现打造气泡屏幕保护效果
- 举例讲解C#编程中委托的实例化使用
- 使用C#代码获取存储过程返回值
- C++中explict关键字用法
- C/C++数据对齐详细解析
- 利用C语言来求最大连续子序列乘积的方法
- 字符串的组合算法问题的C语言实现攻略
- C 语言基础教程(我的C之旅开始了)[三]
- 学习C和C++的9点经验总结
- C++中的extern “C”用法详解
- C 语言基础教程(我的C之旅开始了)[七]
- 最大子矩阵问题实例解析
- C字符串操作函数实现方法小结