我是C ++的新手, 请问有没有办法检查输入字符串是否为数字? 如果是数字,请将其更改为整数。
我知道我们可以使用atoi或stoi。
但是我们如何在一个函数中创建它呢?
答案 0 :(得分:0)
std::istringstream
。std::string
std::string s = "123";
std::istringstream str(s);
int n;
if ( str >> n )
{
// Extraction is successful.
// Use n.
}
进一步的启示
为了使您的程序更加健壮,您可以添加进一步的检查以确保:
“123FAST”不被视为整数 “123.56”不被视为整数 “123.56xyz”不被视为整数。
std::string s = "123";
std::istringstream str(s);
int n;
if ( str >> n )
{
// Extraction is successful.
// Add another check.
// Get the next character.
// It has to be a whitespace character or EOF for the input
// to be an integer.
// If it is neither, don't accept the input as an integer.
std::istream::int_type c = str.get();
if ( std::isspace(c) || str.eof() )
{
// Use n.
}
}
答案 1 :(得分:-1)
您只需检查输入字符串中的每个字符是否为数字,我有一个简单的示例来解决您的问题:
#include <stdio.h>
#include <string.h>
bool is_number(const char * s)
{
int length = strlen(s);
for (int i = 0; i < length; i++)
{
if (s[i] < '0' || s[i] > '9')
return false;
}
return true;
}
int main()
{
printf("Enter a string: ");
char myString[10];
gets(myString);
if (is_number(myString))
printf("%s is a number", myString);
else
printf("%s is not a number", myString);
}
答案 2 :(得分:-1)
我认为你甚至不需要检查。根据C ++ API:
如果str中的第一个非空白字符序列不是a 有效的整数,或者如果没有这样的序列,则可能 str为空或仅包含空格字符,不包含转换 执行并返回零。
请参阅: http://www.cplusplus.com/reference/cstdlib/atoi/
-
所以,你应该能够做到:
// Convert the string
int value = atoi( myString.c_str() );
if ( value == 0 )
{
// The string was not a valid integer
}
else
{
// The string was a valid integer
}
答案 3 :(得分:-1)
&#39; ISNUM()&#39;下面的函数检查给定的字符串是否仅由数字组成。但是,如果数字非常大,它可能无效。
#include <bits/stdc++.h>
using namespace std;
bool isnum(string str){
for(int i=0;i<str.length();i++){
if((str[i]<'0') || (str[i]>'9'))return false;
}
return true;
}
int main() {
// your code goes here
int n=0,r=1;
string num;
cin>>num;
if(isnum(num)){
for(int i=num.length()-1;i>=0;i--){
n+=(r)*(int)(num[i]-'0');
r*=10;
}
cout<<n;
}
return 0;
}
答案 4 :(得分:-1)
您可以检查字符串中是否有任何非数字字符:
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
int main()
{
std::string test;
std::cin >> test;
if(std::find_if(test.begin(), test.end(), [](auto x){return !isdigit(x);}) == test.end())
std::cout << "its a number" << std::endl;
else
std::cout << "not a number" << std::endl;
}