C 编写函数实现函数字符串字符颠倒
这是K&R中的一道题目: 编写一个函数reverse(s),将字符串s中的字符顺序颠倒过来。使用该函数编写一个程序,每次颠倒一个输入行中的字符顺序。
在PHP中曾经做过类似的题,见PHP 实现中文字符串截取无乱码,同样也是写reverse()
函数,我相信C中也有现成的函数,因为编译器高亮颜色不一样。
输出示例:
1hello
2olleh
3
源码:
1#include <stdio.h>
2
3#define MAXLINE 1000
4
5int getline(char line[], int maxline);
6void reverse(char s[]);
7
8main(void)
9{
10 char line[MAXLINE];
11
12 while (getline(line, MAXLINE) > 0) {
13 reverse(line);
14 printf("%s", line);
15 }
16 return 0;
17}
18
19int getline(char s[], int lim)
20{
21 int c, i, j;
22
23 j = 0;
24 for (i = 0; (c = getchar()) != EOF && c != '\n'; ++i)
25 if (i < lim -2) {
26 s[j] = c;
27 ++j;
28 }
29
30 if (c == '\n') {
31 s[j] = c;
32 ++i;
33 ++j;
34 }
35 s[j] = '\0';
36 return i;
37}
38
39void reverse(char s[])
40{
41 int i, j;
42 char temp;
43
44 i = 0;
45 while (s[i] != '\0')
46 ++i;
47 --i;
48 if (s[i] == '\n')
49 --i;
50 j = 0;
51 while (j < i) {
52 temp = s[j];
53 s[j] = s[i];
54 s[i] = temp;
55 --i;
56 ++j;
57 }
58}
59
其中getline()
在这一小章很常用,可是我不知道他的line
变量为什么能够顺利输出,明明是局部变量才对?等看了正式的一章一章应该就明白。
reverse()
函数比较容易理解:
1void reverse(char s[])
2{
3 int i, j;
4 char temp;
5
6 i = 0;
7 while (s[i] != '\0')
8 ++i;
9 --i;
10 if (s[i] == '\n')
11 --i;
12 j = 0;
13 while (j < i) {
14 temp = s[j];
15 s[j] = s[i];
16 s[i] = temp;
17 --i;
18 ++j;
19 }
20}
21
将j
递增i
递减,有点像相遇问题,两边不断交换就反转了。
评论 (0)