单词翻转

来源:互联网 发布:mate10使用感受知乎 编辑:程序博客网 时间:2024/05/17 23:24

问题描述:输入一个英文句子,翻转句子中单词的顺序。要求单词内字符的顺序不变,句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如,若输入“I am a student.”,则输出”student. a am I”。

分析

翻转每个单词;
翻转每个句子。

代码

include <stdio.h>include <string.h>define  MAXSIZE 1000void ReverseString(char *s ,int from, int to);int main(int argc, char *argv[]){    char s[MAXSIZE];    int pre = 0;    int cur = 0;    int n = 0;    scanf("%[^\n]",s);    n = strlen(s);    printf("%s\n",s);    while (cur < n){        if (s[cur] == ' '){            ReverseString(s,pre,cur-1);            pre = cur+1;        }        ++cur;    }    if (s[cur-1] != ' '){        ReverseString(s,pre,cur-1);        pre = cur+1;    }    ReverseString(s,0,n-1);    printf("%s\n",s);    return 0;}void ReverseString(char *s ,int from, int to){    while(from < to){        char tmp s[from];        s[from] = s[to];        s[to] = tmp;        from++;        to--;    }}

重点

两个位置指示器,分别指向单词开始和结束位置;
遇到空格就翻转单词,最后一个单词翻转要额外处理;
scanf输入一行字符串scanf(“%[^\n]”,s),用getline函数也可;

0 0