将由输入文件确定的多个相同字符串(星号)串在一起。 C++
Posted
技术标签:
【中文标题】将由输入文件确定的多个相同字符串(星号)串在一起。 C++【英文标题】:Stringing together multiples of the same string (an asterisk) determined by an input file. C++ 【发布时间】:2021-02-27 18:57:13 【问题描述】:本质上,目标是读取输入文件(因此是 inFile
和 inFileName
)并使用 ID(例如 1375892)输出带有星号的人口增长(例如 1375892),从 1900 年到 2020 年以 20 年为增量。
因此,1 个星号代表 1000 人,3 个星号代表 3000 人,等等。输入文件包含 5000 和 7000 之类的数字,我需要使用它们来计算我需要的星号数量(除以 1000)。即便如此,我仍试图找出转换asteriskNum
(我需要使用的星号数量)的最后一步,并让它输出星号字符串,而不是我需要多少星号的整数。
我当然知道我遗漏了一些东西,但即使在询问了我的老师并浏览了我的教科书和笔记之后,我仍然无法弄清楚如何解决这个具体问题。
#include<iostream>
#include<iomanip>
#include<string>
#include<fstream>
using namespace std;
int main()
string asterisk = "*";
string firstName;
int PopNum0;
int year1900;
int asteriskNum;
const string INTROLINE"POPULATION GROWTH \n(each * represents 1000 people)";
cout << INTROLINE << "\n";
string inFileName="DL8_L5_Morrison.txt";
ifstream inFileinFileName;
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;
【问题讨论】:
我开始格式化您的代码,但在这样做的同时,我注意到一些问题(似乎)缺少右大括号 (
)。请(彻底)检查并应用任何必要的更正。 (在 Stack Overflow 上更正其他人的问题中的代码是不行的。)
修复格式....目前代码不可读。
欢迎来到 Stack Overflow!请edit您的代码将其减少为您的问题的minimal reproducible example。您当前的代码包含许多与您的问题无关的内容 - 一个最小样本通常看起来类似于一个好的单元测试:只执行一项任务,并为可重复性指定输入值。
【参考方案1】:
您可以使用 std::string
对象并使用将计数和字符作为参数的构造函数 (constructor version #2 here)。这将使用int
作为count参数,但更好将其转换为size_t
类型(或者只是将计算值作为@首先是987654325@):
//...
asteriskNum = PopNum/1000;
cout << year << " " << std::string(static_cast<size_t>(asteriskNum), '*') << std::endl;
//...
【讨论】:
使用字符串构造函数是一个很好的解决方案,我不会考虑。但是,我想知道您转换为 size_t 的理由是什么? 使用不必要的演员表更糟糕。static_cast
将强制编译器关闭并接受一大堆错误的转换。如果必须,请使用对类型的显式控制,但要使用普通的隐式转换而不是强制转换。
@Perette 如果没有将 explicit 强制转换为 size_t
,您的编译器可能会发出警告,说明 (signed) 之间的 implicit 转换int
给定和(未签名)size_t
预期。然而,正如 Ben Voigt 所说,以这种方式关闭编译器的警告是好是坏是一个争论的问题。以上是关于将由输入文件确定的多个相同字符串(星号)串在一起。 C++的主要内容,如果未能解决你的问题,请参考以下文章