替换C中的字符串中的字符

时间:2012-09-06 02:49:09

标签: c string string.h

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

4 个答案:

答案 0 :(得分: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作为安全黑客。

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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

1)strtok修改/操纵原始字符串并将其从分隔符中删除,

2)如果您有多线程程序,最好使用strtok_r这是线程安全/可重入的版本。

答案 3 :(得分: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 ;)