0

我正在尝试定义一个函数,该函数将打开一个数字文本文件并一直阅读它。当函数读取每一行时,它应该将该行作为字符串读取,然后通过条件将 +1 加到每个计数器上,以获取 FIRST 索引点中不同的可能数字(即值 0)。

这是一个示例文本文件:

1245
64356
345
12
863

我的程序应该输出如下内容:

1: 2
2: 0
3: 1
4: 0
5: 0
6: 1
7: 0
8: 1
9: 0

我想我坚持让文本文件行成为>>一个字符串变量,然后将该字符串与一个字符/字符串值进行比较。我尝试使用 while 循环(!filename.good),但切换到for循环以使其正常工作。

这是我的代码如下 - 任何帮助或建设性的批评将不胜感激。

void analyzeData(std::string filename)
{
    // declare the local filestreams i will be using in the function.
    std::ifstream any_file_from_Main;

    // assign actual file data to local filestreams
    any_file_from_Main.open(filename.c_str());

    //conditional to check if files opened, output error if they dont
    if (!any_file_from_Main.good())
    {
        std::cout << "File did not open correctly." << std::endl;
        exit(-1);
    }

    double sum;
    std::size_t first_digit = 0;

    //declare all counter variables
    double one;
    double two;
    double three;
    double four;
    double five;
    double six;
    double seven;
    double eight;
    double nine;

    //input the first line into string first_digit
    any_file_from_Main >> first_digit;

    //continue this loop while the file is not at the end
    for (int i = 0; !any_file_from_Main.eof(); sum++)
    {
        if (first_digit[i] == "1") {
            one++;
        } else if (first_digit[i] == "2") {
            two++;
        } else if (first_digit[i] == "3") {
            three++;
        } else if (first_digit[i] == "4") {
            four++;
        } else if (first_digit[i] == "5") {
            two++;
        } else if (first_digit[i] == "6") {
            six++;
        } else if (first_digit[i] == "7") {
            seven++;
        } else if (first_digit[i] == "8") {
            eight++;
        } else if (first_digit[i] == "9") {
            nine++;
        }

        // advances text file to next line and assigns value
        // to string first_digit
        any_file_from_Main >> first_digit;

    }

    // cout value of counter ints and percentages
}
4

3 回答 3

0
#include <iostream>
#include <fstream>
#include <cstring>

int main ()
{
    char s[10];
    int count[10];
    std::ifstream infile("thefile.txt");

    for ( int i = 0; i < 10; i++)
    {
        count[i] = 0;
    }

    while (infile >> s)
    {
        count[s[0]-'0']++;
    }

    for ( int i = 0; i < 10; i++)
    {
        std::cout << i << ":" << count[i] << "\n";
    }
    getchar();
    return 0;
}

在标准输出中产生以下输出:

0:0
1:2
2:0
3:1
4:0
5:0
6:1
7:0
8:1
9:0
于 2013-10-04T00:58:36.183 回答
0

如果您可以假设输入行为良好,则以下内容应该有效:

#include <iostream>
#include <string>

int main() {
  int digitCounter[10] = {0};
  std::string number;

  while (std::cin >> number) {
    ++digitCounter[number[0] - '0']; }

  for (int i = 0; i < 10; ++i) {
    std::cout << i << ": " << digitCounter[i] << "\n"; }

  return 0;
}
于 2013-10-04T00:59:07.753 回答
0

您的问题是您声明first_digit为:

std::size_t first_digit = 0;

这是一个整数类型。然后你把它读成:

//input the first line into string first_digit
any_file_from_Main >> first_digit;

注意评论说你认为first_digit是一个字符串。然后你把它用作:

    if (first_digit[i] == "1") {
        one++;

但是整数不是数组。您应该声明first_digit为已定义的std::string(删除,= 0;否则您将获得运行时异常)operator[]

接下来是您必须更改"1"'1'. 否则,您将char*char.

于 2013-10-04T01:19:50.400 回答