如何判断一个字符串里是否全是数字

时间:2023-01-04 14:46:47
RT,C里面应该有函数可以直接判断吗 ,用for循环的就不用说了,或者是正则表达式?  谁知道的说下啊

比如 char temp[20] = {"1245645"};

如何判断知道temp里全是数字

20 个解决方案

#1


isdigit()

#2


引用 1 楼 starcat 的回复:
isdigit()

它是用来判断字符的。

#3


因为你的字符串长度未知,恐怕只能用正则了:
用reg = "[^0-9]+"来匹配就可以了。

匹配成功说明不全是数字。

#4


引用 3 楼 thy38 的回复:
因为你的字符串长度未知,恐怕只能用正则了:
用reg = "[^0-9]+"来匹配就可以了。

匹配成功说明不全是数字。


正则这个东西我完全不懂啊,3L能不能直接给段代码看下

#5


不知道在c中如何用正则

#include <stdio.h>

int main(int argc, char *argv[])
{
char temp[] = "123232";
int len = strlen(temp);
char *buf = (char*)malloc(len*sizeof(char));
int i = atoi(temp);
if (strcmp(temp,itoa(i,buf,10)))
{
printf("not all numbers");
} else {
printf("all numbers");
}
free(buf);
return 0;
}

#6



void main()
{
char temp[20] = {"1245645"}; 
char temp2[20] = {"124dd5"}; 

char *p = 0;
int s = strtol(temp, &p, 10);
if (*p == 0)
printf("%s 是数字\n", temp);
else 
printf("%s 不是数字\n", temp2);

char *p2 = 0;
int s2 = strtol(temp2, &p2, 10);
if (*p2 == 0)
printf("%s 是数字\n", temp2);
else 
printf("%s 不是数字\n", temp2);
}

#7


引用 5 楼 fandelei1982 的回复:
不知道在c中如何用正则
C/C++ code
#include<stdio.h>int main(int argc,char*argv[])
{char temp[]="123232";int len= strlen(temp);char*buf= (char*)malloc(len*sizeof(char));int i= atoi(temp);if (strcmp(temp,itoa(i,buf,10)))
    {
        printf("not all numbers");
    }else {
        printf("all numbers");
    }
    free(buf);return0;
}

想法不错,就是当字符串长度超过int大小的时候不起作用了

#8


引用 5 楼 fandelei1982 的回复:
不知道在c中如何用正则
C/C++ code
#include<stdio.h>int main(int argc,char*argv[])
{char temp[]="123232";int len= strlen(temp);char*buf= (char*)malloc(len*sizeof(char));int i= atoi(temp);if (strcmp(temp,itoa(i,buf,10)))
    {
        printf("not all numbers");
    }else {
        printf("all numbers");
    }
    free(buf);return0;
}


这个思路 好 

#9


C++里是:

string abc="12340573129asdf";
if(abc.find_first_not_of("1234567890")!=string::npos){cout<<"不全是数字";}

#10


C里用正则表达式得用其他库了 你搜下应该有

#11


引用 5 楼 fandelei1982 的回复:
不知道在c中如何用正则
C/C++ code
#include<stdio.h>int main(int argc,char*argv[])
{char temp[]="123232";int len= strlen(temp);char*buf= (char*)malloc(len*sizeof(char));int i= atoi(temp);if (strcmp(temp,itoa(i,buf,10)))
    {
        printf("not all numbers");
    }else {
        printf("all numbers");
    }
    free(buf);return0;
}



5L这个不错,但为什么我在运行的时候会有点小问题,MS出在free(buf);这话上,图传不上来,就说是Debug ERRor      
DAMAGE:AFTER Normal block 什么的

#12


while(*s && *s>='0' && *s<='9') s++;

if (*s)
    //不是纯数字
else
    //纯数字

#13


正则最简单,搜索下

#14


int main()
{
   char a[100];
   scanf("%[123456789]",a);
   printf("%s\n",a);
 
    return 0;
}
用这种方法可以,只要是你输入的不是数字,就给你截取掉,你首先去长度,处理完毕后在去长度,如果长度一样,那就是全是数字了,不然就不是。

#15


引用 12 楼 pcboyxhy 的回复:
while(*s && *s>='0' && *s <='9') s++;

 if (*s)
     //不是纯数字
 else
     //纯数字

这个好像是最简单的

#16


对啊,上面的代码都可以啊。

#17


赞同12L和14L、、、

#18


用循环还是最简单的

#19


我也不会正则,使用循环可以解决问题。

#20


循环遍历一遍,与数字做比较。

#1


isdigit()

#2


引用 1 楼 starcat 的回复:
isdigit()

它是用来判断字符的。

#3


因为你的字符串长度未知,恐怕只能用正则了:
用reg = "[^0-9]+"来匹配就可以了。

匹配成功说明不全是数字。

#4


引用 3 楼 thy38 的回复:
因为你的字符串长度未知,恐怕只能用正则了:
用reg = "[^0-9]+"来匹配就可以了。

匹配成功说明不全是数字。


正则这个东西我完全不懂啊,3L能不能直接给段代码看下

#5


不知道在c中如何用正则

#include <stdio.h>

int main(int argc, char *argv[])
{
char temp[] = "123232";
int len = strlen(temp);
char *buf = (char*)malloc(len*sizeof(char));
int i = atoi(temp);
if (strcmp(temp,itoa(i,buf,10)))
{
printf("not all numbers");
} else {
printf("all numbers");
}
free(buf);
return 0;
}

#6



void main()
{
char temp[20] = {"1245645"}; 
char temp2[20] = {"124dd5"}; 

char *p = 0;
int s = strtol(temp, &p, 10);
if (*p == 0)
printf("%s 是数字\n", temp);
else 
printf("%s 不是数字\n", temp2);

char *p2 = 0;
int s2 = strtol(temp2, &p2, 10);
if (*p2 == 0)
printf("%s 是数字\n", temp2);
else 
printf("%s 不是数字\n", temp2);
}

#7


引用 5 楼 fandelei1982 的回复:
不知道在c中如何用正则
C/C++ code
#include<stdio.h>int main(int argc,char*argv[])
{char temp[]="123232";int len= strlen(temp);char*buf= (char*)malloc(len*sizeof(char));int i= atoi(temp);if (strcmp(temp,itoa(i,buf,10)))
    {
        printf("not all numbers");
    }else {
        printf("all numbers");
    }
    free(buf);return0;
}

想法不错,就是当字符串长度超过int大小的时候不起作用了

#8


引用 5 楼 fandelei1982 的回复:
不知道在c中如何用正则
C/C++ code
#include<stdio.h>int main(int argc,char*argv[])
{char temp[]="123232";int len= strlen(temp);char*buf= (char*)malloc(len*sizeof(char));int i= atoi(temp);if (strcmp(temp,itoa(i,buf,10)))
    {
        printf("not all numbers");
    }else {
        printf("all numbers");
    }
    free(buf);return0;
}


这个思路 好 

#9


C++里是:

string abc="12340573129asdf";
if(abc.find_first_not_of("1234567890")!=string::npos){cout<<"不全是数字";}

#10


C里用正则表达式得用其他库了 你搜下应该有

#11


引用 5 楼 fandelei1982 的回复:
不知道在c中如何用正则
C/C++ code
#include<stdio.h>int main(int argc,char*argv[])
{char temp[]="123232";int len= strlen(temp);char*buf= (char*)malloc(len*sizeof(char));int i= atoi(temp);if (strcmp(temp,itoa(i,buf,10)))
    {
        printf("not all numbers");
    }else {
        printf("all numbers");
    }
    free(buf);return0;
}



5L这个不错,但为什么我在运行的时候会有点小问题,MS出在free(buf);这话上,图传不上来,就说是Debug ERRor      
DAMAGE:AFTER Normal block 什么的

#12


while(*s && *s>='0' && *s<='9') s++;

if (*s)
    //不是纯数字
else
    //纯数字

#13


正则最简单,搜索下

#14


int main()
{
   char a[100];
   scanf("%[123456789]",a);
   printf("%s\n",a);
 
    return 0;
}
用这种方法可以,只要是你输入的不是数字,就给你截取掉,你首先去长度,处理完毕后在去长度,如果长度一样,那就是全是数字了,不然就不是。

#15


引用 12 楼 pcboyxhy 的回复:
while(*s && *s>='0' && *s <='9') s++;

 if (*s)
     //不是纯数字
 else
     //纯数字

这个好像是最简单的

#16


对啊,上面的代码都可以啊。

#17


赞同12L和14L、、、

#18


用循环还是最简单的

#19


我也不会正则,使用循环可以解决问题。

#20


循环遍历一遍,与数字做比较。

#21