比如 char temp[20] = {"1245645"};
如何判断知道temp里全是数字
20 个解决方案
#1
isdigit()
#2
它是用来判断字符的。
#3
因为你的字符串长度未知,恐怕只能用正则了:
用reg = "[^0-9]+"来匹配就可以了。
匹配成功说明不全是数字。
用reg = "[^0-9]+"来匹配就可以了。
匹配成功说明不全是数字。
#4
正则这个东西我完全不懂啊,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
想法不错,就是当字符串长度超过int大小的时候不起作用了
#8
这个思路 好
#9
C++里是:
string abc="12340573129asdf";
if(abc.find_first_not_of("1234567890")!=string::npos){cout<<"不全是数字";}
#10
C里用正则表达式得用其他库了 你搜下应该有
#11
5L这个不错,但为什么我在运行的时候会有点小问题,MS出在free(buf);这话上,图传不上来,就说是Debug ERRor
DAMAGE:AFTER Normal block 什么的
#12
while(*s && *s>='0' && *s<='9') s++;
if (*s)
//不是纯数字
else
//纯数字
if (*s)
//不是纯数字
else
//纯数字
#13
正则最简单,搜索下
#14
int main()
{
char a[100];
scanf("%[123456789]",a);
printf("%s\n",a);
return 0;
}
用这种方法可以,只要是你输入的不是数字,就给你截取掉,你首先去长度,处理完毕后在去长度,如果长度一样,那就是全是数字了,不然就不是。
{
char a[100];
scanf("%[123456789]",a);
printf("%s\n",a);
return 0;
}
用这种方法可以,只要是你输入的不是数字,就给你截取掉,你首先去长度,处理完毕后在去长度,如果长度一样,那就是全是数字了,不然就不是。
#15
这个好像是最简单的
#16
对啊,上面的代码都可以啊。
#17
赞同12L和14L、、、
#18
用循环还是最简单的
#19
我也不会正则,使用循环可以解决问题。
#20
循环遍历一遍,与数字做比较。
#21
#1
isdigit()
#2
它是用来判断字符的。
#3
因为你的字符串长度未知,恐怕只能用正则了:
用reg = "[^0-9]+"来匹配就可以了。
匹配成功说明不全是数字。
用reg = "[^0-9]+"来匹配就可以了。
匹配成功说明不全是数字。
#4
正则这个东西我完全不懂啊,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
想法不错,就是当字符串长度超过int大小的时候不起作用了
#8
这个思路 好
#9
C++里是:
string abc="12340573129asdf";
if(abc.find_first_not_of("1234567890")!=string::npos){cout<<"不全是数字";}
#10
C里用正则表达式得用其他库了 你搜下应该有
#11
5L这个不错,但为什么我在运行的时候会有点小问题,MS出在free(buf);这话上,图传不上来,就说是Debug ERRor
DAMAGE:AFTER Normal block 什么的
#12
while(*s && *s>='0' && *s<='9') s++;
if (*s)
//不是纯数字
else
//纯数字
if (*s)
//不是纯数字
else
//纯数字
#13
正则最简单,搜索下
#14
int main()
{
char a[100];
scanf("%[123456789]",a);
printf("%s\n",a);
return 0;
}
用这种方法可以,只要是你输入的不是数字,就给你截取掉,你首先去长度,处理完毕后在去长度,如果长度一样,那就是全是数字了,不然就不是。
{
char a[100];
scanf("%[123456789]",a);
printf("%s\n",a);
return 0;
}
用这种方法可以,只要是你输入的不是数字,就给你截取掉,你首先去长度,处理完毕后在去长度,如果长度一样,那就是全是数字了,不然就不是。
#15
这个好像是最简单的
#16
对啊,上面的代码都可以啊。
#17
赞同12L和14L、、、
#18
用循环还是最简单的
#19
我也不会正则,使用循环可以解决问题。
#20
循环遍历一遍,与数字做比较。