我正在尝试构建一个程序,从" bac.txt"中读取数字。并返回最常出现的2位数字/数字(10,11,12,...,99)。例如,如果文件" bac.txt"包含393 17775787 72194942 12121774它将返回77和21.我已设法构建一个工作函数tv = (TextView) findViewById(R.id.textView5);
,它可以计算在文件中找到@Override
public void messageArrived(String topic, MqttMessage message)
throws Exception {
System.out.println(message);
if(message.toString().toLowerCase().contains(str)){
Pattern regex = Pattern.compile("(\\d+(?:\\.\\d+)?)");
Matcher matcher = regex.matcher(message.toString());
while(matcher.find()){
System.out.println(matcher.group(1));
tv.setText("testing");
}
}
}
的次数并返回counter(int n)
,这是n
已找到i
次。现在我似乎找不到一种方法来在屏幕上打印最常见的数字/数字。我尝试使用某种for循环,但它不起作用。
这是我的代码:
n
答案 0 :(得分:0)
我已经更正了代码。现在可以使用了。 您可以查看更改。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int counter(int n)
{
int i = 0, j = 0;
char x1 = n / 10 + '0';
char x2 = n % 10 + '0';
char a;
char b;
fstream fisier("bac.txt", fstream::in);
fisier >> b;
while (fisier >> a) {
if (b == x1 && a == x2)
i++;
b = a;
}
return i;
}
int main()
{
int v[101];
int i, maxim = 0, nr;
for (i = 10; i < 100; i++) {
v[i] = counter(i);
if (v[i] > maxim)
maxim = v[i];
}
for (i = 10; i < 100; i++)
if (v[i] == maxim)
cout << i;
}
答案 1 :(得分:-1)
我不能说你为什么你的节目没有用,但我可以告诉你我是如何解决它的。你必须在一个int向量中存储你从文件中读取的2位数字(例如,如果文件包含1234,int向量将包含12 23 34),那么你必须找到大多数时候出现的2位数,所以,你有读取第一个向量元素并将其存储在变量中,而不是计算它在向量中出现的次数,并保存您在max_a中搜索的数字以及它在max_times_a中出现的次数(请记住,当您在向量中找到时数字你正在搜索你必须加-1 - 而不是你在向量中搜索另一个数字并计算它出现的次数(在该数字上加-1)而不是在max_b和次数中存储该数字它出现在max_times_b中。你要做的就是滑动矢量,如果你到达终点因为你只读-1,你得到max_a和max_b,但如果你找到一个数字,你必须计算它出现的次数并检查它是否大多数时候出现max_a或max_b,如果出现大多数时候你必须交换值。我希望对你有用。