【问题标题】:Figure out how to read integers into ASCII in C++弄清楚如何在 C++ 中将整数读入 ASCII
【发布时间】:2020-07-01 00:17:36
【问题描述】:

我有一个充满数字的.txt 文件。我想将所有数字放入一个数组中。

在它们进入数组之后,一个函数会将这些数字转换为它们分配的 ASCII 字符。

当所有数字都被读取后,.txt 中的所有数字将使用它们的 ASCII 字符创建一张图片。

例如。 numbers.txt 文件包含:

6 99 3 52

第一个数字是打印下一个数字的时间,然后 99 是 ASCII 数字,即'c'

所以'c'将被打印六次,然后程序读取下一对数字。

我遇到问题的部分是编写读取第一个数字和第二个数字的函数,并使第一个数字表示下一个数字将重复的次数。

【问题讨论】:

  • 是否需要使用数组?可以用std::string 代替数组吗?
  • 我被建议使用一个数组来保存我所有的号码,因为它们将在 input.txt 中包含大约 150 对数字。感谢您的帮助

标签: c++ arrays function char ascii


【解决方案1】:

我今天感觉很慷慨:

int quantity;
int char_code;
while (std::cin >> quantity >> char_code)
{
  char c = static_cast<char>(char_code); // Formality.
  for (int i = 0; i < quantity; ++i)
  {
    std::cout << c;
  }
  std::cout << "\n";
}

我使用static_cast 表示我将整数缩小为一个字符。我还使用了一个字符变量,以便std::cout 将打印字符而不是整数表示。

使用std::string 可能会更快。速度增益是字符生成到内存中,然后打印出来。

while (std::cin >> quantity >> char_code)
{
    std::string text(quantity, static_cast<char>(char_code));
    std::cout.write(text.c_str(), quantity);
    std::cout << "\n";
}

在上面的循环中,std::string 构造函数创建了一个重复给定字符的字符串。由于数量是已知的并且在内存中,因此可以使用 block 写入。通常使用块写入,通过直接从内存输出到控制台来消除格式化所花费的时间。

【讨论】:

  • std::cout.write(quantity, text.c_str()); 将不起作用,因为cout.write()char* 用于缓冲区,并将std::streamsize 用于缓冲区大小。您需要改用std::cout.write(text.c_str(), text.size());,或者干脆使用std::cout &lt;&lt; text;
  • 感谢您的评论。进行了更正。
猜你喜欢
  • 2018-03-22
  • 2015-03-31
  • 2014-12-20
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
相关资源
最近更新 更多