题目描述:
编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔。
输入格式:
输入为一个字符串(字符串长度至多为100)。
输出格式:
输出为按要求排序后的字符串。
输入样例:
I am a student
输出样例:
student a am I
AC代码:
#include
#include
#include
void flashback(char a[], int j, int p); //倒序函数
int main(void)
{
char a[10000];
int j, i, k, end;
char temp;
gets(a);
end = strlen(a)-1 ;
for (i = 0; i < end+1; i++) //先处理特殊符号
if (!isalpha(a[i])) //非字母将第一个符号替换为‘ ’
{
a[i] = ' ';
j = 0; //j用来记录连续特殊带符号的个数
if (i == 0) //如果是首字符 删除他
{ k = i;
for (; k <= end - 1; k++)
a[k] = a[k + 1];
a[k] = '
';
}
else k = i+1; //k为特殊符号后的下一字符
while (!isalpha(a[i])&&i<(end+1))
{
i++;
j++;
}
j--;
if (i == (end+1) ) //如果特殊字符结尾,截断字符串
a[k - 1] = ''; else { for (; k <= end - j; k++) //通过搬移数组去除掉连续的特殊字符 a[k] = a[k + j]; a[k] = '
'; } end=strlen(a)-1; } flashback(a, 0, end); //句子倒序 for (i = 0; i < end; i++) if (!isspace(a[i]) && i < end) { j = i++; while (!isspace(a[i]) && i < end) i++; if (i < end) k = --i; else k = end; flashback(a, j, k); } puts(a); } void flashback(char a[], int j, int p) { int i; char temp; for (i = j; i < p; i++, p--) { temp = a[p]; a[p] = a[i]; a[i] = temp; } }欢迎分享,转载请注明来源:内存溢出
评论列表(0条)