搜索“+”和“n”字符之间的所有子字符串

时间:2012-03-30 18:28:01

标签: c++ substring

我正在尝试将一些方程式从输入文件更改为“可读”的形式 目前我需要在字符串P中读取所有数值(作为子字符串,将它们转换为int)。我感兴趣的所有值都在“+”和“n”字符之间(按此顺序为一个循环,和其他循环的倒序) 我需要一个循环找到所有这些并将它们保存到数组(未知大小,因为我不知道字符串P将有多长)。

输入示例(引号中的字符串P):

  1.   

    “+ N2 + -n”
      第一个循环(从+到n读取)所以子串C是:“”,“ - ”
      第二个循环(从n到+读取)所以子串E是:“2”,“”

  2.   

    “+ 2N3 + 3N2 + N”
      第一个循环:“2”,“3”,“”
      第二个循环:“3”,“2”,“”

  3.   

    “+ - + N14 + -11n 1”
      第一循环:“ - ”,“ - 11”
      第二个循环:“14”,“”

  4. 如果解决方案需要,我可以在P字符串的末尾添加“+”。

    PS。如果有人知道如何从示例3中的字符串末尾提取常量(+1或任何其他),我将非常感激。困难的是我不知道它会持续多长时间(+1可以是-300000左右)。

2 个答案:

答案 0 :(得分:2)

请考虑查看正则表达式(一般情况下)和c ++ 0x中的新std :: regex类(特别是)。

C++0x: Regular Expressions

如果要解析任何更复杂的模式,正则表达式总是优雅的解决方案。

答案 1 :(得分:0)

我真的不明白你的问题,但是当我有未知长度/非常大的输入时我个人使用的是linked list,你可以用C {+ {3}}实现,这是如果您发现需要C语法,也可以在C中使用malloc()。

与输入的解析一样,您可以使用用1初始化的变量,并且每次到达子串的末尾时,只需将它乘以-1,并使用涵盖每种情况的简单if语句。或者您可以使用带有“n”或“+”的字符,因此在完成实际解析后,每当光标到达时,您必须使if语句只覆盖几行代码。上面提到的char变量,就像它完成了另一个子串的工作一样。