簡體   English   中英

將整數解析為字符串C.

[英]Parsing Integer to String C

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

如果要將整數轉換為字符串,請嘗試使用函數snprintf()

如果要將字符串轉換為整數,請嘗試使用函數sscanf()atoi()atol()

要將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/

這聽起來像你有一個字符串,並希望將它轉換為整數,從提到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。

這在Steve Summit的C FAQ中有所討論

Java parseInt()函數解析字符串以返回整數。 等效的C函數是atoi() 但是,這似乎與您問題的第一部分不符。 是要將整數轉換為字符串,還是將字符串轉換為整數?

你也可以看看atoi()函數(ascii到整數)和它的親戚, atolatoll等。

此外,還有相反的功能,即itoa()和co。

你可以試試:

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

這應該夠了吧。

您可能需要查看此站點上的合規解決方案

這不是最佳解決方案。 這是我的解決方案,給出了多項限制,因此如果您根據課程/教師的指導方針擁有有限的資源,這可能非常適合您。

還要注意,這只是我自己的項目工具的一小部分,我必須讀取操作數和數字,所以我使用了getchars。 否則,如果你只需要整數而不需要其他類型的字符,我喜歡使用它:

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

規則不是特定的,“高級”C概念:沒有字符串變量,沒有結構,沒有指針,沒有涵蓋的方法,我們被允許的唯一包括#include

因此,沒有像atoi()那樣的簡單方法調用或者任何可以使用的String變量,我選擇了強制它。

1:使用getchar讀取字符(fgets被禁止)。 如果字符無效,則返回1(退出狀態1)。 對於基於Java中的parseInt的問題,1 11 13是有效的,但是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工具的方法概念,這可能是你正在尋找的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM