将输入文件确定的相同字符串星号的倍数串在一起 C++

问题描述

本质上,目标是读取输入文件(因此为 inFileinFileName)并输出人口增长,星号代表使用 ID(例如 1375892)的每 1000 人,从从 1900 年到 2020 年,以 20 年为增量。

因此,1000 人用 1 个星号,3000 人用 3 个星号,等等。输入文件有 5000 和 7000 之类的数字,我需要用它们来计算我需要的星号数量(除以 1000)。即便如此,我还是试图找出转换 asteriskNum (我需要使用的星号数量)的最后一步,并让它输出星号字符串,而不是我需要多少星号的整数。

我当然知道我遗漏了一些东西,但即使问过我的老师并浏览了我的教科书和笔记,我还是不知道如何解决这个具体问题。

#include<iostream>

#include<iomanip>

#include<string>

#include<fstream>

using namespace std;

int main(){
   string asterisk = "*";
   string firstName;
   int PopNum{0};
   int year{1900};
   int asteriskNum{};
   const string INTROLINE{"POPULATION GROWTH \n(each * represents 1000 people)"};
   cout << INTROLINE << "\n";

   string inFileName="DL8_L5_Morrison.txt";
   ifstream inFile{inFileName};

if (inFile){

   cout << inFileName << " opened for reading. \n";

   inFile >> firstName;

   while (not inFile.eof()){
     inFile >> PopNum;
     asteriskNum = PopNum/1000;
     cout << year << " " << asteriskNum << " " <<  << "\n";
     year+=20;

   inFile.close();
}
else {
   cout << inFileName << " did not open for reading. \n";}
   cout<<"Goodbye!\n";
   return EXIT_SUCCESS;
}
}

解决方法

您可以使用 std::string 对象并使用将计数和字符作为参数的构造函数 (enter image description here)。这与计数参数的 int 一起使用,但更好将其强制转换为 size_t 类型(或者只是将计算值首先是 size_t):

//...
  asteriskNum = PopNum/1000;
  cout << year << " " << std::string(static_cast<size_t>(asteriskNum),'*') << std::endl;
//...