单词倒排(C语言)

题目描述:

编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔。

输入格式:

输入为一个字符串(字符串长度至多为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] = '\0'; 
            }
            else k = i+1;                       //k为特殊符号后的下一字符
            
            while (!isalpha(a[i])&&i<(end+1))   
            {
                i++;
                j++;
            }
            j--;
            if (i == (end+1) )                  //如果特殊字符结尾,截断字符串
                a[k - 1] = '\0';
            else {
                for (; k <= end - j; k++)       //通过搬移数组去除掉连续的特殊字符

                    a[k] = a[k + j];
                a[k] = '\0';
            }
           
            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;
    }
}

你可能感兴趣的:(c语言,蓝桥杯,c++)