【发布时间】:2020-01-20 10:52:26
【问题描述】:
我正在尝试将四个数字的块相互比较,以创建一个新的输出文件,其中仅包含满足该条件的输出文件:所有数字都相同的四位数字。
这是我的输入文件代码:
int main()
{
ofstream outfile ("text.txt");
outfile << "1111 1212 4444 \n 2222 \n \n 8888 4567" <<endl;
我想将其拆分为四个块,例如“1111”、“1212”等,以便仅在新输出文件中写入满足要求的块。我决定将整个文件转换为一个整数向量以便能够比较它们。
char digit;
ifstream file("text.txt");
vector <int> digits;
while(file>>digit)
{
digits.push_back(digit - '0');
}
我想比较它们的方法看起来像这样:
bool IsValid(vector<int> digits){
for (int i=0; i<digits.size() i++)
{
if(digits[0] == digits[1] == digits[2] == digits [3])
return true;
else
{
return false;
}
}
}
但是这只会比较第一个块,你会做不同的吗?还是我应该继续做向量的想法。
【问题讨论】:
-
而不是读取单个字符,为什么不将数字读取为字符串?你只需要读取一个数字,如果它满足条件将它写入另一个文件,继续下一个数字......
-
@Aconcagua 我的第一个问题是读取不起作用的整数,但是使用字符串我看不到问题。使用
std::string可以轻松实现位数和所有相同的位数 -
@foreknownas_463035818 啊,好像是我疏忽了。当然,用字符串,那很好......
-
请不要写
if(condition) return true; else return false;之类的代码,那是不好的风格。只需写return condition;。 -
请注意
digits[0] == digits[1] == digits[2] == digits [3]不会按照您的想法行事。首先将比较digits[0] == digits[1]并返回一个布尔值,例如真的。接下来,digits[2]与该值进行比较。 2211 的结果将为真:wandbox.org/permlink/rvlz2Mn7YTKEUmOS