试题描述:
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
输入:
I am a boy
输出:
boy a am I
解题思路:以单词间的空格为切入点,划分出每个单词,然后从后往前打印每个单词即可,需要注意首尾两个单词旁边只有一个空格,需要进行特殊处理。
解法一:
#include <stdio.h>
#include <string.h>
void reverse_sentense(char* p, int N)
{
int a[512];
int i = 0, j = 0, k = 0;
for(i = 0; i < N; i++)
{
if(p[i] == ' ')
{
a[j++] = i;
}
}
for(i = j - 1; i >= 1; i--)
{
if(i == j - 1)
{
for(k = a[i] + 1; k < N; k++)
{
printf("%c", p[k]);
}
printf(" ");
}
for(k = a[i - 1] + 1; k < a[i]; k++)
{
printf("%c", p[k]);
if(k == a[i] - 1)
{
printf(" ");
}
}
if(i == 1)
{
for(k = 0; k < a[i-1]; k++)
{
printf("%c", p[k]);
}
printf(" ");
}
}
}
int main()
{
char str[1024];
gets(str);
int len = strlen(str);
reverse_sentense(str, len);
return 0;
}
解法二:
#include <stdio.h>
#include <string.h>
int main()
{
char str[10000];
int a,len,i;
gets(str);
len = strlen(str);
for(i=len-1;i>=0;i--)
{
if(str[i]==' ')
{
a = i+1;
while(str[a]!=' ')
{
if(a==len)
break;
printf("%c", str[a]);
a++;
}
printf(" ");
}
}
i=0;
while(str[i]!=' ')
{
printf("%c",str[i]);
i++;
}
return 0;
}