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

时间:2023-03-09 06:25:08
c 转置字符串You are a so cheap man ->man cheap so a are You

解题思路:

1、将字符串转置

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

 #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stdbool.h>
//字符串转置
void tranStr(const char *p,char *s)
{
int len = strlen(p);
int i,j;
for(i=len,j=; i>=,j<len; i--,j++)
{
*(s+j) = *(p+i-);
}
*(s+j) = '\0';
} //判断是否为字母
bool isChar(char c)
{
bool isC = false;
if((c >='a' && c<='z')
||(c>='A'&&c<='Z'))
isC = true;
return isC;
}
//转置单词
void tranWord(char *a,int count)
{
int i;
char temp;
for(i=; i<count/; i++)
{
temp = *(a+count--i);
*(a+count--i) = *(a+i);
*(a+i) = temp;
}
} //对转置字符串中的单词转置
void tranStrWord(char *a)
{
int i=,count=,len;
for(i=; i<len; i++)
{
if(isChar(*(a+i)))
count++;
else
{
tranWord(a+i-count,count);
count = ;
}
if(count> && i==len-)
{
tranWord(a+i-count+,count);
}
}
} int main(void)
{
char arr[],brr[];
scanf("%[^\n]", arr); //遇到回车符结束,这样可以接收空格符
tranStr(arr,brr);
tranStrWord(brr);
puts(brr);
return ;
}