【问题标题】:How to search for an integer in a string [closed]如何在字符串中搜索整数 [关闭]
【发布时间】:2014-01-04 02:33:08
【问题描述】:

我正在制作一个程序,当输入是非结构化的时,它会给你一个求和的结果。请参阅以下内容:

输入:

whats 20 + 26

输出:

46

我已经知道如何在字符串中搜索文本 (If text.IndexOf("hello") >= 0 Then)...

我不知道如何将这两个整数用于加法方程。

【问题讨论】:

  • 使用非结构化数据输入流程的目的是什么?即:为什么需要解析输入而不是请求的值 1、值 2、值 n 会增加复杂性?
  • 这其实是一个比较难的问题。这不是一个具体的编程问题,而是一个广泛的编程问题。要解决这个问题,您需要应用一套非常广泛的编程工具,尤其是在您对输入字符串的格式没有限制的情况下。很明显,您甚至还没有考虑过将其组合在一起所需的所有子问题。如果用户键入what is 20 + 26I have 20 apples and 26 fingerswhatever you do, don't tell me the sum of 20 + 26What are 26.9+7 things % 133t k0derz can d0?
  • 简而言之,考虑您所问问题的复杂性,并尝试将问题分解为更简单的子集。就目前而言,这个问题是在问如何编写自然语言解析器——这不是一个小问题。如果你只是学习如何编程,我建议你先从基础开始。
  • 您可能想开始研究正则表达式 - 这样的问题可能会有所帮助:stackoverflow.com/q/3373885/327083 请注意,正则表达式只会为这个问题提供有限且特定类型的解决方案,但它是至少是一个开始。
  • 只需对您的textbox 添加限制 - 就像不允许使用字母一样。这将简化你的作业:) 另外,什么样的人会输入“20+20”而不是“20+20”clicks button

标签: vb.net string integer


【解决方案1】:

这里有一个快速示例,说明如何使用正则表达式开始执行此操作。这对你扔给它的任何东西都不是万无一失的,但它应该是一个好的开始。

请务必将:Imports System.Text.RegularExpressions 添加到您的 .vb 文件中

    'This string is an example input.  It demonstrates that the method below 
    'will find the sum "2345+ 3256236" but will skip over things like 
    '  if + .04g
    '  1.23 + 4
    ' etc...
    Dim input As String = _   
       "aoe%rdes 2345+ 3256236 if + .04g  rcfo 8 3 . 1.23 + 4 the#r whuts"

    Dim pattern As String = "\s\d+\s*\+\s*\d+(?=\s|$)"
    For Each _match As Match In Regex.Matches(input, pattern)
        Dim a = _match.Value.Split("+"c)  'Match extracts "2345+ 3256325"
        Dim x As Integer                
        Dim y As Integer
        If Integer.TryParse(a(0), x) AndAlso Integer.TryParse(a(1), y) Then
            Console.WriteLine("Found the Sum : " & x & " + " & y)
            Console.WriteLine("Sum is : " & x + y)
        Else
            Console.WriteLine("Match failed to parse")
        End If
    Next

正则表达式可以分解为

\s        '(definitely) one whitespace
\d+       'followed by any number of integer digits
\s*       'followed by (possibly) a whitespace
\+        'followed by (definitely) a "+"
\s*       'followed by (possibly) a whitespace
\d+       'followed by any number of integer digits
(?=\s|$)  'followed by (definitely) either a whitespace or EOL

在这里阅读更多:

Regular Expression Language - Quick Reference

.NET Framework Regular Expressions

Regular Expressions Reference

【讨论】:

  • 对不起,我正忙于其他代码。我刚刚回到我的问题。好吧,要么我真的很讨厌 vb.net,要么你做错了。我尝试了您的代码(我并没有真正理解它),但它不起作用。我输入了whats 6 + 6,它给了我一长串整数 3258581,我很确定这不是 6 + 6 的答案。所以是的,我可能做错了。
  • @Naqeeb 3258581 是我回答中示例字符串 input 的答案。这个想法是你应该用你的输入替换input。你不能只是闭上眼睛,按ctrl+cctrl+v 并希望一切顺利。这是编程,儿子。你必须阅读并注意。您是否没有注意到代码还输出Found the Sum : 2345 + 3256236 - 这与字符串input 中的总和相同?
  • 好吧,对不起,我再试一次,就像我说的我不太明白:(
  • @Naqeeb 你读过我发布的链接吗?要理解答案,您必须了解什么是正则表达式以及它们是如何工作的。最后的链接应该给你一个很好的介绍 - 其余的应该在那之后更有意义。
【解决方案2】:

将两个整数解析为两个整数变量——我们将它们称为xy。然后添加他们的结果。

Dim x as Integer
Dim y as Integer
Dim result as Integer

'parse your integers- you indicate you already know how to do this

'add the results
result = x + y

'now print out the result

【讨论】:

  • 他并没有说他已经知道如何解析整数 - 他说他知道如何找到特定的文本,而不是一般的东西,比如任意大小的未指定整数。
  • @J... 请注意,OP 做了两个单独的声明,表明他最有可能解析整数:1)“我已经知道如何在字符串中搜索文本”;和 2)“我不知道如何将这两个整数用于加法方程”。如果它们没有被解析,他怎么能有两个整数“用于加法方程”?我回答了他的问题“我不知道如何将两个整数用于加法方程”。您对我和 Dan Verdolino 的回应投反对票是不值得的。我希望你有一个美好的一天。
  • 阅读帖子标题 - 它询问如何在字符串中搜索整数。语句“我知道如何搜索文本” 并不意味着“我知道如何搜索整数”。英语显然不是 OP 的母语 - 最合乎逻辑的语句 2 应被解读为 “我不知道如何将 [字符串中的] 两个整数用于加法方程”。当然,OP 并没有被赋值和加法的语法难倒。想一想,看看你提供了哪些实际内容。
  • 感谢您提供答案,但我需要从文本框中的文本中找到 2 个整数。
  • @J... 老实说,我不知道 OP 的母语是什么。我只是想帮助她/他。你怎么能假设他很清楚一件事而不是另一件事,这超出了我的理解。也许是千里眼。 Naqeeb,正如其他人所说,如果不对字符串的格式设置严格的规则,从字符串中解析两个单独的整数可能会很困难。您可能想研究词法分析和解析的主题。
猜你喜欢
  • 2014-09-02
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
相关资源
最近更新 更多