【问题标题】:Octave keyboard input function to filter concatenated string and integer?八度键盘输入功能来过滤连接的字符串和整数?
【发布时间】:2015-10-14 12:51:51
【问题描述】:

如果我们写12wkd3,如何选择/过滤123为八度整数?

八度音阶示例:

A = input("A?\n")  
A?  
12wkd3   
A = 123 

12wkd3 是用户键盘输入,A = 123 是预期答案。

【问题讨论】:

  • 尝试使用代码格式化,很好玩!

标签: input filter keyboard concatenation octave


【解决方案1】:

假设您正在寻找的一般形式是从用户输入中获取任意字符串,删除任何非数字,并将结果存储为整数:

A = input("A? /n",'s');
A = int32(str2num(A(isdigit(A)))); 

示例输出:

A?
324bhtk.p89u34
A = 3248934

澄清上面写的内容:

  • 在输入语句中,'s' 参数导致答案存储为字符串,否则将首先由 Octave 评估。大多数输入会产生错误,其他可能会被解释为函数或变量。

  • isdigit(A) 为A 生成一个值的逻辑数组,其中 1 表示 0-9 数字的任何字符,否则为 0。

    isdigit('a1 3 b.') = [0 1 0 1 0 0 0]

  • A(isdigit(A)) 将仅使用与上述逻辑数组中的 1 对应的那些值从 A 生成子字符串。

    A(isdigit(A)) = 13

  • 仍然返回一个字符串,因此您需要使用str2num() 将其转换为数字。但是,它会输出一个双精度数。所以最后要让它成为一个整数,你可以使用int32()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 2014-04-22
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多