首先,我需要阅读两个整数N& Q由空格分隔。我是用cin做的。然后在接下来的两行中,随后是两个N个数字的二进制数。我试图使用getchar()一点一点地读取这些数字并将它们放入int向量,但它正在打印垃圾值。新行字符是否有问题。我知道我可以先将它们读成字符串,然后将它们放入矢量中,但我想这样做。这是我的代码:
#include <iostream>
#include <algorithm>
#include <vector>
#include <stdio.h>
using namespace std;
int main(){
int N;
int Q;
cin >>N>>Q;
string A, B;
//cin >> A>>B;
vector <int> Abit;
vector <int> Bbit;
for (int i=0;i<N;i++){
char c= (int) getchar();
Abit.push_back(c);
}
for (int i=0;i<N;i++){
// cout << Abit.at(i);
char c= (int) getchar();
Bbit.push_back(c);
}
for (int i=0;i<N;i++){
cout << Abit.at(i);
// char c= (int) getchar();
// Bbit.push_back(c);
}
}
答案 0 :(得分:3)
你可以通过阅读一个角色来做到这一点。
char c;
for ( int i = 0; i < N; ++i ){
cin >> c;
Abit.push_back(c);
}
for ( int i = 0; i < N; ++i ){
cin >> c;
Bbit.push_back(c);
}
&gt;&gt;操作员将避免任何形式的分隔,空格,新线等。
答案 1 :(得分:2)
每次键入一个字符并按回车键时,getchar
将被调用两次 - 第一次输入您输入的字符,第二次输入'\ n'字符。因此,如果您输入1 2 3 4 5
,则会在向量中推送以下内容:10, 49, 10, 50, 10
。
来自10
来电的剩余\n
字符的第一个cin << N << Q;
。
其他49
代表ASCII 1
,50
代表ASCII 2
。
您可能希望将整行读入字符串,然后从字符串中提取字符。当然,您仍然需要将ASCII字符转换为整数,但是您可以通过从ASCII 0
的值中减去字符值来实现:c - '0'
。
此外,您可以通过在实际数字之前读取它们来删除之前和之后的全部忽略:
while(getchar() != '\n');
char c= (int) getchar() - '0';
更好的方式,Charlie Burns建议在数字之前跳过所有新行。 Tou只需要在实际数字之前读取所有换行符:
char c;
while((c = getchar()) == '\n');
Abit.push_back(c - '0');