我裂开!

P1598 垂直柱状图

`gets`
by JRzyh @ 2020-10-03 21:17:14


@[P___Q](/user/322307) 不要用 `gets`,据说会读入什么奇奇怪怪的东西(比如 `\r`),同时也不稳定。
by Aw顿顿 @ 2020-10-03 21:22:45


虽然我不知道你的问题是不是只有这一个,但是关于 `gets()` 不安全的说法是这样的: > 任何情况下用 `gets()` 都是不安全的,`gets()` 不检查输入的参数的边界,所以用户输入多少字符都会被拷贝到目标 `buffer` 里面去,很容易造成数组越界。 > > 所以使用次函数的程序能正常运行前提是输入的字符串长度不能超过你定义的字符数组的大小。 > > ——@[Aw顿顿](/user/212283) 摘自知乎
by Aw顿顿 @ 2020-10-03 21:25:30


```cpp#include<bits/stdc++.h> #include<cstring> #define ll long long using namespace std; int main() { string a; string b; string c; string d; getline(cin,a); getline(cin,b); getline(cin,c); getline(cin,d); // gets(b); // gets(c); // gets(d); char mapp[101][101]; int sum[1001]; for(int i=0;i<a.length();i++) sum[a[i]-'A']++; for(int i=0;i<b.length();i++) sum[b[i]-'A']++; for(int i=0;i<c.length();i++) sum[c[i]-'A']++; for(int i=0;i<d.length();i++) sum[d[i]-'A']++; int maxx=0; for(int i=0;i<26;i++) { if(maxx<sum[i]) maxx=sum[i]; } for(int j=0;j<26;j++) { for(int i=0;i<sum[j];i++) { mapp[i][j]='*'; } for(int i=sum[j];i<maxx;i++) mapp[i][j]=' '; } for(int i=maxx;i>=0;i--) { for(int j=0;j<26;j++) { if(j==25) cout<<mapp[i][j]; else cout<<mapp[i][j]<<" "; // if(mapp[i][j]!='\0') // cout<<mapp[i][j]; // if(mapp[i][j]=='\0')break; } cout<<endl; } for(int i=0;i<26;i++) mapp[maxx][i]='A'+i; for(int i=0;i<26;i++) { if(i==25) cout<<mapp[maxx][i]; else cout<<mapp[maxx][i]<<" "; } return 0; }```
by P___Q @ 2020-10-03 21:36:49


全wa,难道getline也是错的?
by P___Q @ 2020-10-03 21:37:21


@[P___Q](/user/322307) 你把```#include<cstring>```改成```#include"string"```或```#include<string>```,这是两个不同的头文件。还有,你没写```cin```需要的```#include<iostream>```。
by justinjia @ 2020-10-08 15:29:20


@[justinjia](/user/373226) 还是不对
by P___Q @ 2020-10-10 15:08:08


|