C++ 有没有一种简单的方法来检查cin输入是否有空格?

C++ 有没有一种简单的方法来检查cin输入是否有空格?,c++,C++,假设我有这样的ints和cin>>s。有没有一种简单的方法可以测试用户输入的“s”是否为空白,而不必求助于isspace,这将导致首先将该int转换为字符串,然后在测试后再次转换为int。使用std::getline函数将整行输入作为std::string,然后解析该行,这与在C++11中使用一样简单: std::string input; std::getline(input, input, std::cin); int const s = std::stoi(input); 它将检查输入的

假设我有这样的
ints
cin>>s
。有没有一种简单的方法可以测试用户输入的“s”是否为空白,而不必求助于
isspace
,这将导致首先将该int转换为字符串,然后在测试后再次转换为int。

使用
std::getline
函数将整行输入作为
std::string
,然后解析该行,这与在C++11中使用一样简单:

std::string input;
std::getline(input, input, std::cin);
int const s = std::stoi(input);

它将检查输入的有效性,如果无法执行转换,则抛出异常。此外,将输入作为
std::string
提供,您可以执行任何检查,检查字符串中是否存在特定字符也很简单。

使用
std::getline
函数将整行输入作为
std::string
,然后解析该行,这与在C++11中使用一样简单:

std::string input;
std::getline(input, input, std::cin);
int const s = std::stoi(input);
它将检查输入的有效性,如果无法执行转换,则抛出异常。此外,将输入作为
std::string
提供,您可以执行任何检查,检查字符串中是否存在特定字符也很简单。

如果您执行以下操作:-

int s;
cin >> s;
它甚至不会在输入空白时返回。用户必须输入一些非空白字符。

如果您这样做:-

int s;
cin >> s;


它甚至不会在输入空白时返回。用户必须输入一些非空白字符。

isspace
,这将导致首先将该int转换为字符串”-不,不会,您认为它为什么会这样做?无论如何,请使用
std::getline()
std::string::find()
。我的意思是使用getline会将它捕获为字符串,不是吗?@zeezee:是的,这是一件好事。@zeezee
getline
既不是
操作符>
也不是
isspace
。我指的是你在问题中的断言:你说“使用getline将导致首先将该int转换为字符串,然后再转换回int”,但事实并非如此。@Zeezee文本输入本质上就是文本。以十进制形式输入数字时,I/O库将其作为文本。如果你想要一个数字,你必须转换它。手动执行此操作不需要任何额外的CPU或内存,因为转换无论如何都需要它(这是
operator>>(int&)
内部所做的),您只需要访问中间字符串。因此,简短的回答是“不,您也不应该需要它”。
isspace
这将导致首先将int转换为字符串”-不,它不会,为什么您认为它会?无论如何,请使用
std::getline()
std::string::find()
。我的意思是使用getline会将它捕获为字符串,不是吗?@zeezee:是的,这是一件好事。@zeezee
getline
既不是
操作符>
也不是
isspace
。我指的是你在问题中的断言:你说“使用getline将导致首先将该int转换为字符串,然后再转换回int”,但事实并非如此。@Zeezee文本输入本质上就是文本。以十进制形式输入数字时,I/O库将其作为文本。如果你想要一个数字,你必须转换它。手动执行此操作不需要任何额外的CPU或内存,因为转换无论如何都需要它(这是
operator>>(int&)
内部所做的),您只需要访问中间字符串。所以,简短的回答是“不,你也不需要它”。谢谢克里斯蒂安,我讨厌我的课本没有<代码> STD::Stoi:ZeZeZee:嗯,代码> STD::StII<代码>是C++的一个相对新的添加。这也意味着仍然存在无法使用它的环境;软件公司不会仅仅为了好玩而切换到更新的编译器版本。以前,您会使用类似于
boost::lexical_cast
,或者直接使用
std::istringstream
。也许为了安全起见,我不会使用stoi。我的程序本质上是向用户询问一个数字,稍后将使用该数字。我的教授希望我们也验证所有的空白。我可以使用getline捕获整个输入,然后测试空间,然后测试用户是否输入了一个数字,如果这是真的,我会将字符串转换成一个数字,然后使用它,这看起来很愚蠢。@Zeezee:你的教授可能需要你交的代码来在特定的系统上运行特定的编译器。如果目标系统使用C++11,那么
std::stoi
就没有问题。如果没有,请使用
std::istringstream
。如果教授没有指定目标系统,那么这就是IMO课程的问题。(很久以前,在我的老大学,教授甚至为我们提供了一个构建服务器,让我们在交代码之前上传和测试代码。)你很幸运,我们班上有几个人对我的教授感到厌烦。在我看来,一个教授能做的最糟糕的事情不是把事情弄得很难,而是不能把他所期望的事情说得一清二楚。有谁有一个原因,为什么你制作了<代码> int <代码> A<代码> const <代码>?谢谢克里斯蒂安,我讨厌我的教科书没有<代码> STD::Stoi:ZeZeZee:嗯, STD::Stoi是C++的一个相对新的添加。这也意味着仍然存在无法使用它的环境;软件公司不会仅仅为了好玩而切换到更新的编译器版本。以前,您会使用类似于
boost::lexical_cast
,或者直接使用
std::istringstream
。也许为了安全起见,我不会使用stoi。我的程序本质上是向用户询问一个数字,稍后将使用该数字。我的教授希望我们也验证所有的空白。我可以使用getline捕获整个输入,然后测试空间,然后测试用户是否放置了nu