算法笔记刷题4(PAT B1009)

这一题本来不应该有什么问题的,我很快写出来了,在dev c++里面运行也正常。但是放到pat以后出现了问题。更换了c/c++都不行通过编译。

#include <cstdio>
#include <cstring>

int main(){
    char str[81];
    gets(str);
    int i=0,k=0,let[81];
    while(str[i]!='\0'){
        if(str[i]==' '){
            let[k++]=i;
        }
        i++;
    }
    let[k++]=strlen(str);
    for(int i=0;i<k;i++){
        if(i==0){
            for(int j=let[i]-1;j>=0;j--){
                printf("%c",str[j]);
                
            }
        }else for(int j=let[i]-1;j>let[i-1];j--){
                printf("%c",str[j]);
                
            }
        if(i!=k-1)printf(" ");
    }
    return 0;
}

 

 

猜想是pat可能是不支持gets这个函数。去查了一圈发现好像是真的,决定换用cin.getline函数来处理。

注意:使用这个函数前面要加上:

#include <iostream>
using namespace std;

尤其是第二句,如果忘了cin前就要加std::,为了偷懒起见,还是一开始就加上比较好。

在改动的过程中,又发现我之前程序的问题:1.看错题了,单词内部不需要倒序;2.单词次序没有调换;

最终版本的代码

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int main(){
    char str[81];
    cin.getline(str,81);
    int i=0,k=1,let[81];
    let[0]=-1;
    while(str[i]!='\0'){
        if(str[i]==' '){
            let[k++]=i;
        }
        i++;
    }
    let[k]=strlen(str);
    for(int i=k;i>0;i--){
        for(int j=let[i-1]+1;j<let[i];j++){
                printf("%c",str[j]);    
            }
        if(i!=1)printf(" ");
    }
    return 0;
}

 ps:关于gets为什么不能使用

stackoverflow上的回答:

https://stackoverflow.com/questions/49249067/gets-not-declared-in-the-scope

所以以后能不用gets(),就不要用辽

新知识get

 

posted @ 2020-03-08 22:19  红拂与妹奔  阅读(198)  评论(0编辑  收藏  举报