Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C语言中计算字符串的数值_C_String_Char - Fatal编程技术网

如何在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

我试图计算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 = 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()
不报告溢出。