题目

  1. 输入一行字符串(单词和若干空格),输出该行单词(每个单词一行)
    Input:hello_____world_ how___are___you___\n
    Output:
          hello
          world
          how
          are
          you
    思路:是空格就不输出,不是空格就输出,再碰到空格注意输出换行
  2. 输入一行字符串,把字符串翻转 。
    Input: I____am__a__student
    Output: student__a__am____I
    思路:
    1、直接翻转一下
    2、把每个单词找出来,原地自身翻转

代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void list_words()
{
    int i;
    char c[100];
    while(gets(c)!=NULL)
    {
        i=0;
        while(c[i])
        {
            if(c[i]!=' '&&c[i+1]==' ')
            {
                printf("%c\n",c[i]);
            }else if(c[i]!=' '&&c[i+1]!=' ')
            {
                printf("%c",c[i]);
            }
            i++;
        }
        if(c[i-1]!=' ')
        {
            printf("\n");
        }

    }
}


void reverse(char *pstart,char* pend)
{
    char tmp;
    while(pstart<pend)
    {
        tmp=*pstart;
        *pstart=*pend;
        *pend=tmp;
        pstart++;
        pend--;
    }
}

void word_reverse()
{
    char c[100];
    char *ps,*pe;
    while(gets(c)!=NULL)
    {
        //字符串原地翻转
        reverse(c,c+strlen(c)-1);
        ps=pe=c;
        while(*ps)
        {
            while(*ps!=' '&&*ps)//这里是找到单词的结尾
            {
                ps++;
            }
            reverse(pe,ps-1);//翻转单词
            while(*ps==' ')//找到单词的开头
            {
                ps++;
            }
            pe=ps;
        }
        puts(c);
    }
}
int main()
{
    //1、
    //list_words();
    //2、
    word_reverse();
    system("pause");
}

执行结果
1
图片说明

2
图片说明