输入一句英语,编写程序,利用指针将句中所有单词的顺序颠倒输出。输入为在一行内总长度不超过80的字符串,该字符串由若干单词组成,假设其中单词是由英文字母组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格(末尾无标点符号),要求定义指针完成程序。
问题1
如何输入一行句子
scanf函数不支持在键盘上读取一段完整的英语句子(因为其碰到空格或‘/0’就会停止读入),采用gets函数。
get函数的用法
gets(array’s name);
读到换行符时停止输入
问题2
颠倒输出思路
先将整个句子颠倒,再颠倒逐个单词(提取单词只需关注空格)
# include "stdio.h"
# include "string.h"
//本函数与判断回文字符串十分相似,只是加上了交换操作
void reverse_(char *low, char *high) //low与high是字符串中单个字符的地址 *low *high代表该字符
{
while(low<high)
{
char tem = *low;
*low = *high;
*high = tem;
high--;
low++;
}
}
void reversewords_(char *str, int len)
{
reverse_(str, str+len-1); //颠倒整个句子
while(*str) //意思就是未读取到\0
{
char *first = str;
while(*str && (*str != ' '))
{
str++;
}
reverse_(first, str-1); //将空格之前的单词颠倒
if(*str == ' ') //读取到空格后往后移动一位,进行下一个单词的颠倒
{
str++;
}
}
}
int main()
{
char str[100];
gets(str);
int len = strlen(str);
reversewords_(str, len);
printf("%s\n", str);
return 0;
}