为什么我的C ++程序不起作用?

时间:2016-05-01 17:10:12

标签: c++

我正在尝试构建一个程序,从" 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

2 个答案:

答案 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,如果出现大多数时候你必须交换值。我希望对你有用。

  • 托马索