在字符串向量

时间:2017-03-13 12:18:02

标签: c++ string int getline

我正在编写一个程序,我需要输入一行输入,其中包含一个字母和两个带有空格的数字。让我们说,像“I 5 6”。

我使用std :: getline将输入作为字符串输入,这样就不会出现任何空白问题,然后使用for循环来浏览字符串中的各个字符。只有当第2个和第3个字符(第3个和第5个计算空白字符)是数字时,我才需要执行某个条件。

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

3 个答案:

答案 0 :(得分:2)

为了您的目的,我会将该行放入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
}

答案 1 :(得分:1)

您可以使用b[-1] = b[-1] + b.pop()。这是一个例子:

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; } 检查c是否是字母。 http://www.cplusplus.com/reference/cctype/isalpha/

输出将是:

  

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

对于数字使用isalpha

isdigit

输出将是:

  

1776年之后的那一年是1777年

/* 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; } 检查c是否为十进制数字。 http://www.cplusplus.com/reference/cctype/isdigit/

答案 2 :(得分:0)

它有一个函数isdigit()

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

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

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