C++ 测试字符串向量中的int

C++ 测试字符串向量中的int,c++,string,int,getline,C++,String,Int,Getline,我在写一个程序,需要一行输入,由一个字母和两个数字组成,中间有空格,比如说,像“I5 6” 我使用STD::GETLIN将输入作为字符串,这样就不会有空白的问题,也不会有一个for循环来浏览字符串中的单个字符。只有当第2和第3个字符(第3和第5个空格计数)是数字时,我才需要执行特定的条件 如何测试字符串中某个位置的字符是否为int 出于您的目的,我会将该行放入,并使用普通流提取操作符从中获取值 也许像 char c; int i1, i2; std::istringstream oss(lin

我在写一个程序,需要一行输入,由一个字母和两个数字组成,中间有空格,比如说,像“I5 6”

我使用STD::GETLIN将输入作为字符串,这样就不会有空白的问题,也不会有一个for循环来浏览字符串中的单个字符。只有当第2和第3个字符(第3和第5个空格计数)是数字时,我才需要执行特定的条件


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

出于您的目的,我会将该行放入,并使用普通流提取操作符从中获取值

也许像

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
}

它有一个函数
isdigit()

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

if (isdigit(s[2]) && isdigit(s[3]))
{
  // both characters are digits
}

但是在您的情况下(
s==“I 5 6”
),您似乎需要检查
s[2]
s[4]
,您可以使用
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;
}
输出将是:

1776年之后的一年是1777年


isdigit
检查c是否为十进制数字字符

显示代码,到目前为止你做了什么使用
std::istringstream
来做。你应该包括代码和你到目前为止的输出“第四和第五次计数空格”应该是第三和第五次,不是吗?这些数字都是单位数字吗?
s[2]
是第三位,
s[3]
是第四位。谢谢你的评论。是的,这还不清楚他到底需要什么。如果他的行是“I 5 6”,他需要检查
s[2]
s[4]
。是的,你说得对,我应该按字符的索引对字符进行寻址以避免混淆。对于答案,我将研究isdigit()。对于答案,我将检查它,看看它与上面的人所说的相比如何。不管怎样,干杯。尽管其他答案很好地解释了我提出的确切问题,但这是最好的答案,因为它检查int,而不管int在字符串中的确切位置如何,并且也适用于包含多个字符的数字。干杯嘿,我有一个问题-我在理论上理解它的作用,但当我尝试实际运行代码时,我得到std::istringstream oss“不允许不完整类型”。我是一个初学者,流对我来说是一个未知的领域,所以你能解释一下问题是什么吗?@fishypril按照参考的链接,看看你需要包含哪些头文件
/* 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;
}