改正字符数组中的内容

有一个字符数组的内容为:"student a am i",
请你将数组的内容改为"i am a student".
要求:
不能使用库函数。
只能开辟有限个空间(空间个数和字符串的长度无关)。

student a am i
i ma a tneduts
i am a student

 1 #include<stdio.h>
 2 
 3 void reverse_string(char* start, char* end)
 4 {
 5     while (start < end)
 6     {
 7         char temp = *start;
 8         *start = *end;
 9         *end = temp;
10         ++start;
11         --end;
12     }
13 }
14 
15 int mystrlen(char* str)
16 {
17     int count = 0;
18     while (*str)
19     {
20         count++;
21         ++str;
22     }
23     return count;
24 }
25 
26 void reverse(char* str)
27 {
28     //整体逆转
29     char* start = str;
30     char* end = str + mystrlen(str) - 1;
31     char* cur = str;
32     reverse_string(start, end);
33     //局部逆转,子串逆转
34     while (*cur)
35     {
36         //子串的起点和终点
37         char* sub_start = cur;
38         while ((*cur != ' ') && (*cur != '\0'))
39         {
40             ++cur;
41         }
42         //逆转子串
43         reverse_string(sub_start, cur - 1);
44         //走到下一个子串的起点
45         while (*cur == ' ')
46         {
47             ++cur;
48         }
49     }
50 }
51 
52 int main()
53 {
54     char str[100];
55     //scanf("%s", str);
56     //scanf函数遇到空格和换行自己结束了,这里应该使用gets函数
57     gets(str);
58     reverse(str);
59     printf("%s\n",str);
60 
61     return 0;
62 }

 



posted on 2019-02-13 23:44  The_Ocean  阅读(169)  评论(0编辑  收藏  举报

导航