3

我有一个格式为字符串的 char 数组,<item1>:<item2>:<item3>分解它的最佳方法是什么,以便我可以分别打印不同的项目?我应该只遍历数组,还是有一些字符串函数可以提供帮助?

4

4 回答 4

1

我会使用该sscanf功能

char * str = "i1:i2:i3";
char a[10];
char b[10];
char c[10];
sscanf(str, "%s:%s:%s", a, b, c);

这是不安全的,因为它容易受到缓冲区溢出的影响。在 Windows 中,有 sscanf_s 作为安全黑客。

于 2012-09-06T02:53:09.907 回答
1

您可以尝试 strtok:这里是一些示例代码,用于获取由 - 或 | 分隔的子字符串

#include <stdio.h>
#include <string.h>
int main(int argc,char **argv)
{
char  buf1[64]={'a', 'a', 'a', ',' , ',', 'b', 'b', 'b', '-', 'c','e', '|', 'a','b', };
/* Establish string and get the first token: */
char* token = strtok( buf1, ",-|");
while( token != NULL )
    {
/* While there are tokens in "string" */
        printf( "%s ", token );
/* Get next token: */
        token = strtok( NULL, ",-|");
    }
return 0;
}
于 2012-09-06T02:56:42.940 回答
0

只需遍历字符串,每次点击':',打印自上次出现':'.

#define DELIM ':'


char *start, *end;

start = end = buf1;

while (*end) {
    switch (*end) {
        case DELIM:
            *end = '\0';
            puts(start);
            start = end+1;
            *end = DELIM;
            break;
        case '\0':
            puts(start);
            goto cleanup;
            break;
    }
    end++;
}

cleanup:
// ...and get rid of gotos ;)
于 2012-09-06T06:27:15.820 回答
0

strtok是最好的选择,想在这里添加两件事:

1)strtok修改/操作您的原始字符串并将其从分隔符中剥离出来,并且

2)如果你有一个多线程程序,你最好使用strtok_r线程安全/可重入版本。

于 2012-09-06T04:22:27.287 回答