c++ - ruby 如何像 C++ 一样以 scanf 风格读取用户输入

标签 c++ ruby scanf

我是 Ruby 新手。 我需要读取用户输入的 (n) 个数字,在 C++ 中我使用了这段代码

for(i=0;i<N;i++)
{
  scanf("%d",&array[i]);
}

此代码准确读取由任何空格(制表符、空格、换行符)分隔的 (n) 个数字。

我如何在 ruby​​ 中做到这一点?

在 Ruby 中我试着这样做

require 'scanf'
n = scanf("%d");
arr = Array.new()
n.times { arr << scanf("%d") }

但是当我输入这样的字符串时,这段代码不起作用:

1   4    8

但如果我输入这个就可以正常工作

1
4
8

最佳答案

使用字符串#scan

我不是 100% 确定我知道你真正想在这里做什么。如果你只想扫描字符串中的数字,你可以使用 String#scan做这样的事情:

digits = '1   4    8'.scan /\d+/
# => ["1", "4", "8"]

这将返回在字符串中找到的数字数组,您可以使用任何 Array 访问您的 digits 数组或 Enumerable你喜欢的方法。

如果你想像处理制表符或空格一样处理换行符,你需要做的就是添加用于多行匹配的m标志。例如:

digits = '1
          4 8'.scan /\d+/m
# => ["1", "4", "8"]

关于c++ - ruby 如何像 C++ 一样以 scanf 风格读取用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14787471/

相关文章:

ruby 无限循环

javascript - 对象的方法可以作用于自身吗?

c - 停止 fscanf?

c++ - 所有子串的频率

C++ 迭代器 : no appropriate default constructor available

ruby - 字符类具有重复的范围 :/regular expression of email/

代码只有 2 个输入,尽管它有 3 个 fgets

c - 在 C 中的循环中读取字符串时从 sscanf 获取偏移量

c++ - c++中异步线程的实现

c++ - gsl::cstring_span 不支持 constexpr 吗?如果没有,我为什么要使用它?