簡體   English   中英

掃描字符串以查找c中的字符

[英]scan string for occurrences of a character in c

我在C ++或C#中找到了幾個答案,但對於C沒有找到答案。

我需要知道如何計算字符串中的字符數。 目的是確定字符串中是否存在一個封閉的塊(以大括號'{''}'邊界)。 現在我有以下內容:

int closedBlock(char* value) {
    int open = 0;

    int i;
    for (i = 0; i < strlen(value); i++) {
        if (!strcmp("{", value[i])) {
            open++;
        } else if (!strcmp("}", value[i])) {
            open--;
        }
    }

    return !open;
}

但在第一個if檢查后崩潰。 我不清楚為什么這行不通。 我想象它與錯誤的指針有關(這似乎一直是C語言中的問題),但我無法弄清楚。 除了工作代碼之外,解釋為什么我的壞人將很有幫助。

謝謝。

注意

我知道,這只是檢查'{'的數量是否等於'}'的數量,而不是真正地檢查是否存在適當封閉的塊。 解決這個問題后,我將解決這個問題。

strcmp將比較兩個以null終止的字符串。 仍然讓我感到困惑的是,您的編譯器實際上並未抱怨第二個參數是char 如果要比較單個字符,請使用equal-operator ==

int closedBlock(char* value) {
    int open = 0;
    int length = strlen(value);
    int i;
    for (i = 0; i < length; i++) {
        if (value[i] == '{') {
            open++;
        } else if (value[i] == '}') {
            open--;
        }
    }

    return !open;
}

提示:如果使用gcc-Wall -Wextra添加到編譯器調用中,通常會產生有用的警告。

我知道,這只是檢查“ {”的數量等於“}”的數量,而不是真正地檢查是否存在適當封閉的塊。 解決這個問題后,我將解決這個問題。

這里的另一個提示:什么時候可以有一個無效的塊? 當且僅當在沒有前面的起始令牌{情況下發生了結束令牌}時。 你已經擁有的所有工具,這一點,你只是缺少另一if語句來。

這是因為您試圖將字符串"{"與單個字符: value[i]

value (大概)指向一個字符數組,而value[i]指定其中一個字符。 因此,您希望像這樣比較字符與字符:

for (i = 0; i < strlen(value); i++) {
    if (value[i] == '{') {
        open++;
    } else if (value[i] == '}') {
        open--;
    }
}

注意在{}周圍使用引號。 這告訴編譯器它是單個字符而不是C字符串。

如果只比較一個字符,為什么要使用strcmp()

您可以簡單地使用==運算符參見我的示例:

http://ideone.com/dNCH2

最好的問候肯尼

暫無
暫無

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

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