c 转置字符串You are a so cheap man ->man cheap so a are You

解题思路:

1、将字符串转置

2、对转置后的字符串中单词转置

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 #include<stdbool.h>
 5 //字符串转置
 6 void tranStr(const char *p,char *s)
 7 {
 8     int len = strlen(p);
 9     int i,j;
10     for(i=len,j=0; i>=0,j<len; i--,j++)
11     {
12         *(s+j) = *(p+i-1);
13     }
14     *(s+j) = '\0';
15 }
16 
17 //判断是否为字母
18 bool isChar(char c)
19 {
20     bool isC = false;
21     if((c >='a' && c<='z')
22        ||(c>='A'&&c<='Z'))
23         isC = true;
24     return isC;
25 }
26 //转置单词
27 void tranWord(char *a,int count)
28 {
29     int i;
30     char temp;
31     for(i=0; i<count/2; i++)
32     {
33         temp = *(a+count-1-i);
34         *(a+count-1-i) = *(a+i);
35         *(a+i) = temp;
36     }
37 }
38 
39 //对转置字符串中的单词转置
40 void tranStrWord(char *a)
41 {
42     int i=0,count=0,len;
43     for(i=0; i<len; i++)
44     {
45         if(isChar(*(a+i)))
46             count++;
47         else
48         {
49             tranWord(a+i-count,count);
50             count = 0;
51         }
52         if(count>0 && i==len-1)
53         {
54             tranWord(a+i-count+1,count);
55         }
56     }
57 }
58 
59 int main(void)
60 {
61     char arr[50],brr[50];
62     scanf("%[^\n]", arr);   //遇到回车符结束,这样可以接收空格符
63     tranStr(arr,brr);
64     tranStrWord(brr);
65     puts(brr);
66     return 0;
67 }

 

posted @ 2015-04-14 09:29  林海云  阅读(278)  评论(0编辑  收藏  举报