我的字符串分析是這樣的:串strtok_r
abcd "efgh [data\]" pqrl 12fgd]
我想分析直到「]」,這是不是一個反斜槓「\」
我可以用strtok_r
做着手?如果不是,我應該怎麼做?
我的字符串分析是這樣的:串strtok_r
abcd "efgh [data\]" pqrl 12fgd]
我想分析直到「]」,這是不是一個反斜槓「\」
我可以用strtok_r
做着手?如果不是,我應該怎麼做?
沒有一個鏡頭的方法來執行此操作使用strtok_r
。由於您的分隔符是單個字符,因此如果由strtok_r
返回的標記的最後一個字符爲'\',則可以通過填充分隔符來始終重建所需的字符串。
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "abcd \"efgh [data\\]\" pqrl 12fgd]";
char *tokens[2] = {0};
char *pToken = str;
unsigned int i = 0;
for(tokens[i] = strtok_r(str, "]", &pToken); ++i < 2;
tokens[i] = strtok_r(NULL, "]", &pToken)) {
}
for(i = 0; i < 2; ++i) {
printf("token %d = %s\n", i, tokens[i]);
}
for(i = 0; i < 2; ++i) {
if(tokens[i][strlen(tokens[i]) - 1] == '\\') {
tokens[i][strlen(tokens[i])] = ']';
}
}
printf("output = %s\n", str);
return 0;
}
此輸出:
token 0 = abcd "efgh [data\
token 1 = " pqrl 12fgd
output = abcd "efgh [data\]" pqrl 12fgd
感謝這個例子。 – hari
strtok搜索要搜索的集合中的任何單個字符。你可以分開],然後檢查哪些是前面的\但你不能用它搜索正則表達式。
您可以使用strchr
。下面是我想嘗試做(未經測試):
p = str;
while ((p = strchr(p, ']')) {
if (p > str && *(p-1) != '\')
/* This is it. */
哪裏是所有的愚蠢 「你嘗試過什麼」 的評論? –