算法笔记刷题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
什么时候能成为真正优秀的程序员呢