64,644
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string.h>
int isint(char* s)
{
char *intmax="2147483647",*intmin="-2147483648";
if(*s=='-')
{
if(strlen(s)<strlen(intmin))
return 1;
if(strlen(s)>strlen(intmin))
return 0;
else if(strcmp(s,intmin)>0)
return 0;
else
return 1;
}
else
{
if(strlen(s)<strlen(intmax))
return 1;
if(strlen(s)>strlen(intmax))
return 0;
else if(strcmp(s,intmax)>0)
return 0;
else
return 1;
}
}
int main(void)
{
char *s[10]={"99","0","2147483647","-2147483648","-99999","3333333333","2053333333","13333333333","-3333333333","-933333333"};
int i;
for(i=0;i!=10;++i)
if(isint(s[i]))
printf("%s is integer\n",s[i]);
else
printf("%s is not intger\n",s[i]);
getchar();
return 0;
}
#include <iostream>
template < typename _TType >
bool is_valid_number( const char *sz ) {
_TType num = 0;
int pos = 0;
while( sz && sz[pos] ) {
switch( sz[pos] ) {
case '+':
if ( pos > 0 ) {
return false;
}
break;
case '-':
if ( pos > 0 ) {
return false;
}
++pos;
if ( !(sz[pos] >= '0' && sz[pos] <= '9') ) {
return false;
}
num = -(signed char)(sz[pos] - '0');
break;
case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
{
_TType old_num = num;
signed char val = (signed char)(sz[pos] - '0');
if ( num >= 0 ) {
num = num * 10 + val;
} else {
num = num * 10 - val;
}
if ( num/10 != old_num ) {
return false;
}
}
break;
default:
return false;
}
++pos;
}
return true;
}
int main() {
const char * nums[] = {
"0",
"-1",
"32768",
"32767",
"-32768",
"-32769",
"2000000000",
"-2000000000",
"-4000000000",
"4000000000",
};
for ( size_t idx = 0; idx<sizeof(nums)/sizeof(nums[0]); ++idx ) {
std::cout << nums[idx] << (is_valid_number<short>(nums[idx])?" is a valid short integer":" not a valid short integer") << std::endl;
std::cout << nums[idx] << (is_valid_number<long>(nums[idx])?" is a valid long integer":" not a valid long integer") << std::endl;
std::cout << nums[idx] << (is_valid_number<long long>(nums[idx])?" is a valid long long integer":" not a valid long long integer") << std::endl;
}
return 0;
}
int num;
sscanf(str, "%d", &num);
int num;
istringstream stream(str);
stream>>num;
int num = boost::lexical_cast<int>(str);
#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
int isInteger(const char *s)
{
long val;
char *ptr;
errno = 0;
ptr = 0;
val = strtol(s, &ptr, 10);
if (errno || (ptr && *ptr) || val < (long)INT_MIN || val > INT_MAX)
return 0;
return 1;
}
int main(void)
{
const char *s;
s = "xxxxxxx1234"; printf("%s %d\n", s, isInteger(s));
s = "xxxxxxxxxxx"; printf("%s %d\n", s, isInteger(s));
s = "1234xxxxxxx"; printf("%s %d\n", s, isInteger(s));
s = "1234xxx1234"; printf("%s %d\n", s, isInteger(s));
s = "+3333333333"; printf("%s %d\n", s, isInteger(s));
s = "+1234567890"; printf("%s %d\n", s, isInteger(s));
s = "+2147483647"; printf("%s %d\n", s, isInteger(s));
s = "+2147483648"; printf("%s %d\n", s, isInteger(s));
s = "-2147483648"; printf("%s %d\n", s, isInteger(s));
s = "-2147483649"; printf("%s %d\n", s, isInteger(s));
return 0;
}
/* 输出:
xxxxxxx1234 0
xxxxxxxxxxx 0
1234xxxxxxx 0
1234xxx1234 0
+3333333333 0
+1234567890 1
+2147483647 1
+2147483648 0
-2147483648 1
-2147483649 0
*/