【问题标题】:checking for letters in a string of ints检查一串整数中的字母
【发布时间】:2016-09-28 00:05:14
【问题描述】:
bool isInt(string input) { //checks if string input is an int 
if (input[0] == '-') { //checks if negative number
    for (int a = 1; a < input.length(); a++) {
        if (isdigit(input[a])) {
            return true;
        }
        else {
            return false;
        }
    }
} 
for (int b = 0; b < input.length(); b++) {
    if (isdigit(input[b])) {
        return true;
    } else {
        return false;
    }
}

}

所以我这里的代码是检查用户输入的字符串,看看它是否是一个整数。它可以工作,除非第一个字符是 - 或数字,但如果后面跟着 -23ab 或 -4b 等字符,我的程序不会将其视为错误,因为它不是有效数字。我知道错误是由于我的 return true/false 语句造成的,但我不知道如何解决它。

有什么想法吗?

【问题讨论】:

  • 调试器是解决此类问题的正确工具。 询问 Stack Overflow 之前,您应该逐行逐行检查您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
  • 如果你想将一个字符串转换为一个整数,那么char* pStr = "-h4dfg"; int a = atoi(pStr); cout &lt;&lt; a; atoi() 如果有一个字母在数字的最左边,则返回 0
  • std::strtol 会更有用,@Raindrop7。它会告诉你它停止转换的字符是什么,如果那个字符不是空的,它就停止得太快了。不过,不确定溢出情况。我认为这很愚蠢,并且在溢出整数但不是 100% 确定之后继续。
  • 您的循环永远无法遍历整个字符串,因为它们包含if this { return } else { return }。它们决定返回什么值,并在查看一个字符后采取该操作!

标签: c++ string function int


【解决方案1】:

根本没用!!

它只关心字符串中的第一个字符,因为你 return 无论字符的状态如何。您需要将结果存储在变量中并继续搜索,直到第一次失败。

【讨论】:

  • ...甚至没有变量:在第一个错误时返回,否则在循环后返回。
【解决方案2】:

一看到 1 位数字,您就会返回 true。只有在没有错误的情况下,才应该返回 true。你可以提前返回 false,但是对于这个问题,你应该只在最后返回 true。

【讨论】:

    【解决方案3】:

    正如这里的其他人所说,您只检查第一个字符并返回第一个字符是否为数字....您要做的是检查字符是否为数字... .如果是这样,那么继续你到下一个数字。您返回的唯一原因是您是否遍历了所有字符或找到了非数字字符。

    for each character
       if character is a digit
          do nothing
       else
          return that it is false.
    return true //you will only get to this statement if all characters are digits
    

    这就是你所拥有的......

    for each character 
       if character is a digit 
           return true
       else 
           return false
    

    所以它基本上在检查其余字符之前返回

    【讨论】:

      【解决方案4】:

      您的代码正在努力。您正在测试成功和失败,而不仅仅是寻找失败案例。

      以下代码将位置索引设为 0,如果字符串不为空,它会检查前导“-”,如果找到,则将索引位置增加到 1。

      然后它会简单地检查字符串中的非数字字符,如果找到则失败。

      如果到达字符串的末尾,则字符串全是数字。

      bool isInt(const std::string& in)
      {
          size_t pos = 0;
          if (!in.empty() && in[0] == '-')
              pos = 1;
          if (pos >= in.size())  // catch "" and "-"
              return false;
          do {
              if (!isdigit(in[pos]))
                  return false;
          } while (++pos < in.length());
      
          return true;
      }
      

      这解决了您当前的问题,但仍然存在可能的问题:字符串“123456789123456789”是 int 吗?它太大了,无法存储在 int 中。

      【讨论】:

        猜你喜欢
        • 2011-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-29
        相关资源
        最近更新 更多