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 }

 

你可能感兴趣的:(heap)