Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从不带分隔符c+的文件中读取数字+;_C++_File_C++11_Integer_Delimiter - Fatal编程技术网

C++ 从不带分隔符c+的文件中读取数字+;

C++ 从不带分隔符c+的文件中读取数字+;,c++,file,c++11,integer,delimiter,C++,File,C++11,Integer,Delimiter,我有一个从文件中读取代码的工作原型。我的问题是如何在没有空格的情况下从文件中读取它。要使下面的代码正常工作,文件内容需要如下所示: 34625 我希望在文件中输入以下内容: 34625 对于我的输出,我希望: 3发生4次 4出现5次 5发生6次 6发生7次 我还想知道是否有一种方法可以在不初始化数组的情况下打印数字。在我的代码中,文件中的数字是12。但是,有没有一种方法可以设置“未知”,以防以后用户想要添加更多的整数来读取文件 #include <iostream> #in

我有一个从文件中读取代码的工作原型。我的问题是如何在没有空格的情况下从文件中读取它。要使下面的代码正常工作,文件内容需要如下所示: 34625

我希望在文件中输入以下内容: 34625

对于我的输出,我希望:

3发生4次
4出现5次
5发生6次
6发生7次

我还想知道是否有一种方法可以在不初始化数组的情况下打印数字。在我的代码中,文件中的数字是12。但是,有没有一种方法可以设置“未知”,以防以后用户想要添加更多的整数来读取文件

#include <iostream>     
#include <fstream>
using namespace std;

//NEEDS to read numbers WITHOUT SPACES!!
int main()
{
  ifstream theFile ("inputData.txt");
  int MaxRange= 9;
  char c;
  int myint[12]={0};
  int mycompare[12]={0};
  int mycount[12] = {0};
  int i = 0, j = 0, k = 0;
  for(j=0;j <= MaxRange;j++){
    mycompare[j] = j;
  }

  do
  {
    theFile>>myint[i];
    for(j=0;j<=MaxRange;j++)
    {
      if(myint[i] == mycompare[j])
        mycount[j] = mycount[j]+1;
    }
    i++;
  }
  while((myint[i] >=0) && (myint[i] <= MaxRange));

  for(j=0; j <=MaxRange; j++)
  {
    if(isdigit(j)) 
      ++j;
    cout<< j<< " occurs: "<<mycount[j]<<endl;  
  }
}
#包括
#包括
使用名称空间std;
//需要读取没有空格的数字!!
int main()
{
ifstream文件(“inputData.txt”);
int MaxRange=9;
字符c;
int-myint[12]={0};
int mycompare[12]={0};
int mycount[12]={0};
int i=0,j=0,k=0;
对于(j=0;j>myint[i];

对于(j=0;j=0)&&(myint[i]为什么不使用char-type从文件中读取?使用char,您可以逐个字符读取并计数。使用开关大小写结构而不是“for”计数可能更好。
最后一段对我来说不清楚。

免责声明-下面的代码未编译或测试。按原样提交,您将得到您想要的

请注意,我如何将文件读取(
cin
)更改为使用字符而不是整数。这允许我一次读取文件1个字符。还请注意,我已将范围更改为10,因为有10个可能的数字(记住0),并已将我的计数数组设置为此大小。还要注意,这将适用于任何文件大小,但如果32位系统上的文件中有超过20亿个1值整数(整数溢出),则可能会失败

#include <iostream>     
#include <fstream>
using namespace std;

int main()
{
  ifstream theFile ("inputData.txt");
  const int MaxRange= 10;
  char c;
  int mycount[MaxRange] = {0};

  // Check for eof each loop.  This may not be the best way to do this, 
  // but it demonstrates the concept.

  // A much better way is to put the cin assign right in the while loop parenthesis- 
  // this replaces and catches the eof automatically.
  while(!cin.eof())
  {
    theFile>>c;

    // If the char isn't a digit, we ignore it.
    if(!isdigit(c))
      continue;

    // Convert char to integer.
    int value = c + '0';

    // Update count array.
    mycount[value]++;
  }

  // Print the final array for each value.  You could skip counts
  // of zero if you would like with a little extra logic.
  for(int j=0; j<MaxRange; j++)
  {
    cout<< j<< " occurs: "<<mycount[j]<<endl;  
  }
}
#包括
#包括
使用名称空间std;
int main()
{
ifstream文件(“inputData.txt”);
常量int MaxRange=10;
字符c;
int mycount[MaxRange]={0};
//检查每个循环的eof。这可能不是最好的方法,
//但它展示了这个概念。
//更好的方法是将cin赋值放在while循环括号中-
//这将自动替换并捕获eof。
而(!cin.eof())
{
文件>>c;
//如果字符不是数字,我们将忽略它。
如果(!isdigit(c))
继续;
//将字符转换为整数。
整数值=c+‘0’;
//更新计数数组。
mycount[值]+;
}
//打印每个值的最终数组。可以跳过计数
//如果你愿意的话,加上一点额外的逻辑。

对于(int j=0;j开始时的简单示例(使用文件更改
cin

输出

2 occurs 1 times
3 occurs 1 times
4 occurs 1 times
5 occurs 1 times
6 occurs 1 times

从您的问题来看,不清楚您试图不初始化哪个数组。也就是说,您的大多数数组根本不需要。如果您只想计算文件中0,1,2,3,4,5,6,7,8,9的数字,则可以通过一点数学来完成。至于在不使用空格分隔符的情况下读取值,读取m在1个字符中,而不是int,然后将字符转换成整数。我知道如何在C中这样做,但是可能有一个C++方式来代替流。对于文件大小,您实际上只在一个时间内读取1个数。因此,唯一需要的是一个整数缓冲区,而不是一个保持跟踪的数组。数字计数的k。
mycompare
myint
的数组都是浪费。在
mycount
中输入超过10个条目也是浪费。因为“给我密码”,所以还给你+1降价是非常粗鲁和不公平的。据我所知,你有一个只包含数字的文件,你想写一个代码来计算每个数字(0到9)。如果我错了,请更正。我需要知道你想做什么(确切地说),我将为您编写代码。还要注意,如果找不到输入文件,如果文件不是ASCII等,这将非常失败。你好,Michael,感谢代码。我修复了一些问题,但现在它根本不读取。输出为0出现0次,1出现0次,等等。再次,未测试的代码未测试。在这一点上,它将是cellent将在调试器中逐步完成上述代码,并查看其失败的原因或者在isdigit检查上。放置断点并单步执行将确定问题存在的位置。您也可以尝试将
文件>>c
行直接放在while循环检查中,替换eof,正如我建议的那样。这肯定非常有帮助。我非常接近,而且它正在工作,我遇到的问题是它正在输出-num还有BER。我会花一些时间修复代码。如果我可能不再有问题,我会更新此评论。完美,效果很好。谢谢大家的帮助。对于这一次,它给出了负面结果,所以我在这段时间之间添加了if(isdigit(c))来修复它
34625
2 occurs 1 times
3 occurs 1 times
4 occurs 1 times
5 occurs 1 times
6 occurs 1 times