测试字符串向量中的 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的主要内容,如果未能解决你的问题,请参考以下文章