我觉得我写的这段代码有些问题,但是我不知道错在哪里。有一道题过不去,但换成scanf()就过去了。
我希望能找到一组hack数据或一个不合适的场景。
各位Dalao帮忙调一下吧,谢谢!
char buf[1<<20], *p1, *p2;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?0:*p1++)
void getstr(char* s, ll &len) {
memset(s, 0, sizeof(s));
char ch=getchar(); len=0;
while (ch<'a'||ch>'z') ch=getchar();
while (ch>='a'&&ch<='z') s[++len]=ch, ch=getchar();
}
getstr(s, n)
调用:
s:指针,指向char s[0];
n:整型变量,字符串长度。
行为:
从输入流读入一个小写字母组成的字符串,存储到s中,长度存储到n中。
注意:
s可以换成其它字符串,名字可以不是s,可以不是空的。
不可与scanf同时使用。
给定n个字符串,每个字符串一行。输出n、字符串和字符串长度。
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
char buf[1<<20], *p1, *p2;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?0:*p1++)
inline ll read() {
ll x=0, f=1;
char ch=getchar();
while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*f;
}
#define N 1000010
ll n, len;
char s[N];
void getstr(char* s, ll &len) {
memset(s, 0, sizeof(s));
char ch=getchar(); len=0;
while (ch<'a'||ch>'z') ch=getchar();
while (ch>='a'&&ch<='z') s[++len]=ch, ch=getchar();
}
signed main() {
n=read();
printf("n=%lld\n", n);
while (n--) {
getstr(s, len);
printf("s=\"%s\", len=%lld\n", s+1, len);
}
return 0;
}