题解 | #单词倒排#

单词倒排

http://www.nowcoder.com/practice/81544a4989df4109b33c2d65037c5836

思路:
(1)排除字符串首尾非字母,找到真正的 begin 和 stop 。并令尾端的非字母为 ' \n '
(2)在 begin ~ stop 之间,将字符串的 非字母 全部替换为 ‘ /0 ’
(3)从 stop 开始遍历,直到 begin 。发现空格,就输出空格后面的字符。然后将该空格替换为 ' \0 ' ,作为下一个单词输出时的结束符
(4)最后输出 字符串 的第一个单词  printf("%s",&str[begin]);
程序:
#include<stdio.h>
#include<string.h>
int main(){
    char str[10001]={'\0'};
    scanf("%[^\n]\n",str);
    int begin=0,stop=strlen(str)-1;
    //排除开头的非字母,找到真正开始的位置begin
    for(int i=0;i<strlen(str);i++){
        if(str[i]>='A'&&str[i]<='Z')
            break;
        else if(str[i]>='a'&&str[i]<='z')
            break;
        else begin=i+1;
    }
    //printf("%d",begin);
    //找到真正结束的位置stop,并将尾部的非字母变为'\0',用作结束
     for(int i=strlen(str)-1;i>=0;i--){
        if(str[i]>='A'&&str[i]<='Z')
            break;
        else if(str[i]>='a'&&str[i]<='z')
            break;
        else{
            str[i]='\0';
            stop=i-1;
        }
     }
     //printf("%d",stop);
    //将非字母转化为空格
    for(int i=begin;i<=stop;i++){
        if(str[i]>='A'&&str[i]<='Z')
            continue;
        else if(str[i]>='a'&&str[i]<='z')
            continue;
        else str[i]=' ';
    }
    //倒着找空格,输出空格后面的单词。然后把空格换为'\0'.继续找下一个空格
    for(int i=stop;i>=begin;i--){
        if(str[i]==' '){
            if(str[i+1]!='\0'){
                printf("%s ",&str[i+1]);
                str[i]='\0';
            }
            else i=i-1;
        }
    }
    //输出第一个单词
    printf("%s",&str[begin]);
}
全部评论

相关推荐

听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
2 3 评论
分享
牛客网
牛客企业服务