如何在C语言中计算字符串的数值
我试图计算C中字符串的值 我将字符串定义为:如何在C语言中计算字符串的数值,c,string,char,C,String,Char,我试图计算C中字符串的值 我将字符串定义为:char cadena[100]=“Esto es un text securizado$2516” 我需要将2516转换为int,实际上我正在尝试使用atoi(),但我不知道如何分离字符串以使用该函数 请原谅,我的英语不是我的母语,我希望你能理解我想做什么。一个简单的方法可以如下所示 int number = 0; char cadena[100] = "Esto es un text securizado$2516"; size_t n = st
char cadena[100]=“Esto es un text securizado$2516”
我需要将2516转换为int,实际上我正在尝试使用atoi()
,但我不知道如何分离字符串以使用该函数
请原谅,我的英语不是我的母语,我希望你能理解我想做什么。一个简单的方法可以如下所示
int number = 0;
char cadena[100] = "Esto es un text securizado$2516";
size_t n = strcspn( cadena, "0123456789" );
if ( cadena[n] ) number = atoi( cadena + n );
或者,如果数字已由0初始化,则可以直接写入
number = atoi( cadena + n );
在这种情况下,零将是默认值。您可以使用
strrchr
查找字符最右边的匹配项。它返回指向最右边字符的指针,如果未找到,则返回NULL
:
char *p;
int n;
if ((p = strrchr(cadena, '$')) != NULL)
sscanf(p + 1, "%d", &n);
请注意,我们将1添加到p
。这是因为p指向$
字符
不要使用atoi
,因为它不会进行错误检查。另一方面,sscanf
在故障时返回0
#include <stdio.h>
int main(void){
char cadena[100] = "Esto es un text securizado$2516";
int value = 0;
size_t i;
for(i = 0; cadena[i]; ++i){
if(1 == sscanf(cadena + i, "%d", &value))//try and get
break;
}
printf("%d\n", value);
return 0;
}
内部主(空){
char cadena[100]=“Esto es un text securizado$2516”;
int值=0;
尺寸i;
对于(i=0;cadena[i];++i){
如果(1==sscanf(cadena+i、%d、&value))//尝试获取
打破
}
printf(“%d\n”,值);
返回0;
}
value=atoi(strchr(cadena,“$”)+1)
但是这太简单了,如果没有“$”
使用strcspn()
跳过非数字字符,然后对其余字符使用atoi
。您可以使用strchr()
获取指向字符串中第一个字符的指针。您可以使用它来查找“$”的位置。可能是重复的,您需要先定义规则,然后才能实现它。我们不可能仅仅从一个例子中就看出这个规律。例如,如果字符串是“Esto es 2516 en$2500或1400”,我可以想出三个可能的答案,具体取决于规则是什么。(规则是使用第一个数字吗?最后一个数字吗?前面有一个$
?还是什么?)@chux我已经根据你的评论更新了我的帖子。注意:sscanf(p+1,“%d”,&n)
在转换失败时将返回0(无数字)sscanf()
和atoi()
不报告溢出。