题目描述:(总结C语言字符串的用法)
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
本人AC代码:
方法一:(改进版)
// 1009 说反话 (20 分)
// 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
// 时间 2019年7月15日
# include <stdio.h>
# include <string.h>
int main(void)
{
char S[100];
int tail, head;
// 读入字符串
gets(S);
int len = strlen(S);
head = tail = len-1;
for (int i=len-1; i>=0; i--)
{
if (S[i] == ' ' || i==0)
{
head = i;
for (head; head<=tail;head++)
{
if (S[head] != ' ')
printf("%c",S[head]);
}
tail = i;
if (i != 0)
printf(" ");
}
}
return 0;
}
方法二:(初级版)(我已经不是当初写方法二时的我了,我也不知道咋想的 0.0)
// 1009 说反话 (20 分)
// 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
// 时间 2019年2月6日
# include <stdio.h>
# include <stdlib.h>
int main(void)
{
char S[100];
char ch;
int i, j;
int n; // 记录字符串的长度
int new_head, head, tail;
for (i=0; i<100; i++)
{
S[i] = getchar();
if (S[i] == 10) // 换行符的ASCII码值为 10 当遇到就停止输入
break;
}
n = i;
new_head = 0;
for (i=0; i<n; i++)
{
tail = i;
// 处理出去最后一组之外的所有字符
if (S[i] == 32)
{
tail--;
head = new_head;
for (j=head; j<tail; j++)
{
ch = S[head];
S[head] = S[tail];
S[tail] = ch;
head++;
tail--;
if (head>=tail)
break;
}
new_head = i+1;
}
// 处理最后一个单词
if (i == n-1)
{
tail = n-1;
head = new_head;
for (j=head; j<tail; j++)
{
ch = S[head];
S[head] = S[tail];
S[tail] = ch;
head++;
tail--;
if (head>=tail)
break;
}
}
}
for (i=n-1; i>=0; i--)
{
printf("%c",S[i]);
}
return 0;
}