21

如何string(char* || char[])在 C 中解析一个整数?在 C 中是否有Integer.parseInt(String)与 Java 中的方法等效的方法?

4

9 回答 9

48

如果要将整数转换为字符串,请尝试使用函数snprintf().

如果要将字符串转换为整数,请尝试函数sscanf()oratoi()atol()

于 2009-01-25T23:41:23.933 回答
15

要将 int 转换为字符串:

int x = -5;
char buffer[50];
sprintf( buffer, "%d", x );

你也可以为双打:

double d = 3.1415;
sprintf( buffer, "%f", d );

要将字符串转换为 int:

int x = atoi("-43");

有关这些函数的文档,请参阅http://www.acm.uiuc.edu/webmonkeys/book/c_guide/

于 2009-01-26T00:11:49.660 回答
10

听起来你有一个字符串并想将它转换为一个整数,从提到的 来判断parseInt,尽管从问题中不太清楚......

为此,请使用strtol. 这个函数比 稍微复杂一点atoi,但作为回报,它提供了更清晰的错误条件指示,因为它可以用第一个字符的地址填充一个指针(调用者提供的)使其混淆。然后调用者可以检查有问题的字符并确定字符串是否有效。atoi相比之下,如果它丢失了,它只会返回 0,这并不总是有帮助的——尽管如果你对这种行为感到满意,那么你不妨使用它。

下面的示例使用strtol。错误检查非常简单:如果第一个无法识别的字符不是'\x0'结束字符串的字符,则认为该字符串不包含有效的 int。

int ParseInt(const char *s,int *i)
{
    char *ep;
    long l;

    l=strtol(s,&ep,0);

    if(*ep!=0)
        return 0;

    *i=(int)l;
    return 1;
 }

如果字符串包含一个有效的整数,此函数用整数填充 *i 并返回 1。否则,它返回 0。

于 2009-01-26T01:34:57.653 回答
2

这在 Steve Summit 的 C 常见问题中进行了讨论。

于 2009-01-26T01:51:44.840 回答
1

JavaparseInt()函数解析字符串以返回整数。等效的 C 函数是atoi(). 但是,这似乎与您问题的第一部分不匹配。您想从整数转换为字符串,还是从字符串转换为整数?

于 2009-01-25T23:43:41.793 回答
1

您还可以查看atoi()函数(ascii 到整数)及其亲属,atolandatoll等。

此外,还有一些函数也可以做相反的事情,即itoa()和 co。

于 2009-01-25T23:48:34.077 回答
0

您可能想查看此站点上的兼容解决方案

于 2009-01-26T07:01:01.283 回答
0

你可以试试:

int intval;
String stringval;
//assign a value to intval here.
stringval = String(intval);

这应该够了吧。

于 2012-12-10T19:33:58.467 回答
-1

这不是最佳解决方案。这是我的解决方案,有多个限制,因此如果您的资源有限,根据您的课程/教师指南,这可能非常适合您。

另请注意,这是我自己的项目实现的一小部分,我必须读取操作数和数字,所以我使用了 getchars。否则,如果您只需要整数而不需要其他类型的字符,我喜欢使用这个:

int k;
while (scanf("%d", &k) == 1)

这些规则没有特定的“高级”C 概念:没有字符串变量、没有结构、没有指针、没有涵盖的方法,我们被允许的唯一包含是#include

因此,由于没有可用的 atoi() 等简单方法调用或任何可使用的 String 变量,我选择了暴力破解。

1:使用 getchar 读取字符(fgets 被禁止)。如果存在无效字符,则返回 1(退出状态 1)。对于基于 Java 1 11 13 中的 parseInt 的问题是有效的,但 1 11 1a 是无效的,因此对于所有值,如果所有字符都是 0-9 忽略空格,我们都有一个有效的“字符串”。

2:将 char 的 ASCII 值转换为其整数值(例如 48 => 0)

3:使用变量 val 来存储一个 int,这样对于“子字符串”中的每个 char 都有一个对应的整数位。即 "1234" => 1234 将此附加到一个 int 数组并将 val 设置为 0 以供重用。

下面的代码演示了这个算法:

int main() {
    int i, c;
    int size = 0;
    int arr[10]; //max number of ints yours may differ
    int val = 0;
    int chars[1200]; //arbitrary size to fit largest "String"
    int len = 0;

    //Part 1: read in valid integer chars from stdin
    while((c = getchar()) != EOF && (c < 58 && c > 47)) {
        chars[len] = c;
        len++;
     }

    //Part 2: Convert atoi manually. concat digits of multi digit integers and  
    //        append to an int[]
    for(i = 0; i < len; i++){
    for(i = 0; i < len; i++){
        if(chars[i] > 47 && chars[i] < 58){
        while((chars[i] > 47 && chars[i] < 58)){
            if(chars[i] == 48)
                c = 0;
            if(chars[i] == 49)
                c = 1;
            if(chars[i] == 50)
                c = 2;
            if(chars[i] == 51)
                c = 3;
            if(chars[i] == 52)
                c = 4;
            if(chars[i] == 53)
                c = 5;
            if(chars[i] == 54)
                c = 6;
            if(chars[i] == 55)
                c = 7;
            if(chars[i] ==56)
                c = 8;
            if(chars[i] == 57)
                 c = 9;
            val = val*10 + c;
            i++;
        }
        arr[size] = val;
        size++;
        if(size > 10) //we have a check to ensure size stays in bounds
           return 1;
        val = 0;
        }
        //Print: We'll make it a clean, organized "toString" representation
        printf("[");
        for(i = 0; i < size-1; i++){
            printf("%d, ", arr[i]); 
        }
        printf("%d]", arr[i];

        return 0;

同样,这是蛮力方法,但在像我这样的情况下,您无法使用人们专业使用的方法概念或各种 C99 工具,这可能就是您正在寻找的。

于 2015-03-22T07:05:15.657 回答