你可以試一下這個土砲strtok, 不過delimiter只吃一個字元
#include <stdio.h>
char *strtoken(char *s, int delim, int escstart, int escend)
{
static char *ss;
static char *nullpos;
static int eos = 1;
int eot = 1;
if (s)
{
ss = s;
nullpos = s;
eos = 0;
}
else if (!eos)
ss = ++nullpos;
else
return NULL;
for (; ; nullpos++)
{
if (*nullpos == escstart)
eot = 0;
else if (*nullpos == escend)
eot = 1;
if (eot && *nullpos == delim)
{
*nullpos = '\0';
return ss;
}
else if (*nullpos == '\0')
{
eos = 1;
return ss;
}
}
}
例:
char s[] = "DotA Allstars [6.58c is out!]";
char *ss;
ss = strtoken(s, ' ', '[', ']');
while (ss)
{
printf("%s\n", ss);
ss = strtoken(NULL, ' ', '[', ']');
}
※ 引述《wait0211 (我只是過客)》之銘言:
: 又有新的問題 XD
: -> s 55
: address 16進制碼 ASCII
: 000050 61 62 63 30 30 30 30 30 30 30 30 abc000000
: 000060 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 00000000000000
: 000070 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 00000000000000
: 輸入指令像是 f 61 62 63 (搜尋功能)
: 應該要輸出:
: 61 62 63 at 55
: 如果輸入 f 'abc'
: 會輸出:
: abc at 55
: 現在的問題是,我不知道該怎麼讓它去判斷有沒有加單引號,
: 沒加就找16進制,有加就找ASCII
: 我現在只會用strtok分開 f 和 欲搜尋資料 然後去搜尋,
: 找得到就印出它在第幾行,沒辦法精確到第幾個 XD
: 而且還不能搜尋有空白的字串,因為會被strtok切開.. 囧
: 搜尋 16進制碼的功能也出不來..
: 還是說乾脆就不要用strtok啊? XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.192.226.216