我想分析一個空格參數的分隔字符串。例如:是否有strsep窗口變種()
"|One|two|three||octopus|garbagecan||cartwheel||||"
基本上,我需要能夠按ID拉出任何段,如果段是空返null
。
strtok
不處理空字段,它看起來像是基於* nix系統的strsep()
。任何人都知道Windows是否有類似的東西?如果可以,我想盡量避免編寫一個函數來處理這個問題。
我想分析一個空格參數的分隔字符串。例如:是否有strsep窗口變種()
"|One|two|three||octopus|garbagecan||cartwheel||||"
基本上,我需要能夠按ID拉出任何段,如果段是空返null
。
strtok
不處理空字段,它看起來像是基於* nix系統的strsep()
。任何人都知道Windows是否有類似的東西?如果可以,我想盡量避免編寫一個函數來處理這個問題。
利用其描述只寫功能,它並不十分複雜:
#include <stddef.h>
#include <string.h>
#include <stdio.h>
char* mystrsep(char** stringp, const char* delim)
{
char* start = *stringp;
char* p;
p = (start != NULL) ? strpbrk(start, delim) : NULL;
if (p == NULL)
{
*stringp = NULL;
}
else
{
*p = '\0';
*stringp = p + 1;
}
return start;
}
// Test adapted from http://www.gnu.org/s/hello/manual/libc/Finding-Tokens-in-a-String.html.
int main(void)
{
char string[] = "words separated by spaces -- and, punctuation!";
const char delimiters[] = " .,;:!-";
char* running;
char* token;
#define PRINT_TOKEN() \
printf("token: [%s]\n", (token != NULL) ? token : "NULL")
running = string;
token = mystrsep(&running, delimiters); /* token => "words" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "separated" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "by" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "spaces" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "and" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "punctuation" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => NULL */
PRINT_TOKEN();
return 0;
}
端口有一個公共領域strsep()
實現位於http://unixpapa.com/incnote/string.html,我曾經使用過。它需要strcspn()
,但您可能沒有的C90功能。
也許你可以使用這個嗎? http://www.mail-archive.com/[email protected]/msg11257.html – cnicutar 2011-12-14 23:03:31
爲什麼不直接使用`strsep`。如果它不在你的工具上,從BSD發行版中獲取它。 – 2011-12-14 23:15:20