测试字符串向量中的 int

Posted

技术标签:

【中文标题】测试字符串向量中的 int【英文标题】:Testing for int in a string vector 【发布时间】:2017-03-13 12:18:02 【问题描述】:

我正在编写一个程序,我需要获取一行输入,其中包含一个字母和两个数字,中间有空格。比如说,像“I 5 6”。

我使用 std::getline 将输入作为字符串获取,因此空格不会有任何问题,然后使用 for 循环浏览字符串中的各个字符。仅当第 2 和第 3 个字符(计算空白的第 3 和第 5 个字符)是数字时,我才需要执行特定条件。

如何测试字符串中某个位置的字符是否为 int?

【问题讨论】:

显示代码,到目前为止你做了什么 使用std::istringstream 来做到这一点。 您应该包含到目前为止的代码和输出 “第 4 次和第 5 次计算空白”应该是第 3 次和第 5 次,不是吗? 数字是否严格为一位数? 【参考方案1】:

出于您的目的,我会将行放入 std::istringstream 并使用普通的流提取运算符从中获取值。

可能是这样的

char c;
int i1, i2;

std::istringstream oss(line);  // line is the std::string you read into with std::getline

if (oss >> c >> i1 >> i2)

    // All read perfectly fine

else

    // There was an error parsing the input

【讨论】:

尽管其他答案对我提出的确切问题提供了很好的解释,但这是最好的答案,因为它检查 int 而不管其在字符串中的确切位置,并且还适用于由以下组成的数字不止一个字符。干杯! 嘿,我有一个问题 - 我理解这在理论上是做什么的,但是当我尝试实际运行代码时,我得到 std::istringstream oss “不允许不完整类型”。我是初学者,流对我来说几乎是未知领域,所以你能解释一下问题是什么吗? @fishyperil 点开参考链接,看看#include需要什么头文件。【参考方案2】:

您可以使用isalpha。这是一个例子:

/* isalpha example */
#include <stdio.h>
#include <ctype.h>
int main ()

  int i=0;
  char str[]="C++";
  while (str[i])
  
    if (isalpha(str[i])) printf ("character %c is alphabetic\n",str[i]);
    else printf ("character %c is not alphabetic\n",str[i]);
    i++;
  
  return 0;

isalpha 检查 c 是否为字母。 http://www.cplusplus.com/reference/cctype/isalpha/

输出将是:

字符 C 是字母字符 + 不是 字母字符+不是字母

对于数字使用isdigit:

/* isdigit example */
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main ()

  char str[]="1776ad";
  int year;
  if (isdigit(str[0]))
  
    year = atoi (str);
    printf ("The year that followed %d was %d.\n",year,year+1);
  
  return 0;

输出将是:

1776 年之后的一年是 1777 年

isdigit 检查 c 是否为十进制数字字符。 http://www.cplusplus.com/reference/cctype/isdigit/

【讨论】:

谢谢你的答案,为了我的目的,我会检查一下,看看它与上面那个人所说的相比如何。无论哪种方式都干杯。【参考方案3】:

有一个函数isdigit()

要检查字符串s 的第二个和第三个字符,您可以使用以下代码:

if (isdigit(s[2]) && isdigit(s[3]))

  // both characters are digits

但在您的情况下 (s == "I 5 6"),您似乎需要检查 s[2]s[4]

【讨论】:

s[2] 是第三位,s[3] 是第四位。 感谢您的评论。是的,这还不清楚他到底需要什么。如果他的线路是“I 5 6”,他需要检查s[2]s[4] 是的,你是对的,我应该通过索引来处理字符以避免混淆。谢谢你的答案,我要研究 isdigit()。

以上是关于测试字符串向量中的 int的主要内容,如果未能解决你的问题,请参考以下文章

使用 int 和 string 参数生成向量

如何将字符从 int 转换为“出现”在控制台中?

以特定格式拆分从 int 向量创建的字符串

如何在字符串向量中指向 const int?

将字符串向量转换为 int

将 unsigned int + 字符串转换为 unsigned char 向量