我需要解析我的字符串,但我的分隔符是除a-z和A-Z以外的所有字符。 我該怎麼做?解析C中的字符串
我想strtok,但我必須寫所有字符作爲分隔符,它會太長。 Exampe字符串:
Ax'cda2hsa+AsF(f/a as
它需要被分成: 「斧」, 「綜合發展區」, 「HSA」, 「ASF」 「F」 「一」 「爲」
是否有任何C解析功能圖書館,我可以寫我的所有delimeters間隔?
我需要解析我的字符串,但我的分隔符是除a-z和A-Z以外的所有字符。 我該怎麼做?解析C中的字符串
我想strtok,但我必須寫所有字符作爲分隔符,它會太長。 Exampe字符串:
Ax'cda2hsa+AsF(f/a as
它需要被分成: 「斧」, 「綜合發展區」, 「HSA」, 「ASF」 「F」 「一」 「爲」
是否有任何C解析功能圖書館,我可以寫我的所有delimeters間隔?
你可以走通的字符串,做自己,如果你不想做的正則表達式(3)
#include <stdio.h>
#include <string.h>
int main(int ac, char *av[]) {
char string[] = " Ax'cda2hsa+AsF(f/a as";
int i,idx,len;
len = strlen(string);
#define MAX_SPLIT 256
#define MAX_SPLIT_MASK (MAX_SPLIT - 1)
char buf[MAX_SPLIT];
for (idx = 0, i=0;i<len;i++) {
char c = string[i];
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <='Z')) {
buf[idx++ & MAX_SPLIT_MASK] = c;
} else {
buf[idx++ & MAX_SPLIT_MASK] = '\0';
if (idx > 1)
printf("%s\n",buf);
idx = 0;
}
}
if (idx > 1) {
buf[idx++ & MAX_SPLIT_MASK] = '\0';
printf("%s\n",buf);
}
#undef MAX_SPLIT
#undef MAX_SPLIT_MASK
return 0;
}
爲什麼在完美的'isalpha'函數中使用比較? –
其非常明智,但我只是好奇,是否有C庫中的任何解析函數,我可以將間隔記號作爲我的定界符? – user1092043
爲什麼要寫出分隔符,如果要保留的字符來自有限集,而分隔符可以是任何內容? –
如果您正在尋找一個c庫函數,strspn(str, dict)
是有用的。它返回字典中只包含字符的str的第一個子字符串的長度。因此,
strspn("hello world", "leh");
將返回4.
我有太多的delimeters,所以我需要一個函數,我作爲間隔寫我的delimeters。 – user1092043
有了這個,你不需要分隔符。你列出可接受的字母。 – Dave
然後,我需要在字典部分寫abcd ... z,對嗎? – user1092043
使用strpbrk
找到有效字符開始,然後strspn
得到的長度。解壓縮爲新字符串。重複至strpbrk
返回NULL
。
你真的用C或者是C++?如果你使用C++,你可以使用Boost Regex。 –
只需掃描字符串,將所有連續的字母扔入單獨的字符串中並繼續。 –
我需要使用c – user1092043