[英]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字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.