我需要将一个char数组拆分成CSV。实际上我们可以使用strtok()
来反过来,如:
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] ="This,a,sample,string.";
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str,",");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, ",");
}
return 0;
}
但在我的情况下,有一个char数组假设char bits[1024]="abcdefghijklmn"
。我需要将输出设为a,b,c,d,e,f,g,h,i,j,k,m,n
。
是否有任何函数或库可以执行此操作,即在原始含义方面,对于每个字符都必须使用逗号。
答案 0 :(得分:3)
只需遍历字符串,直到找到字符串结尾'\0'
字符。或者使用数组中数据的长度(可能小于数组大小)并使用简单的for
循环。
答案 1 :(得分:1)
你可以使用旧基本的这个简单功能:
// ............................................................. string word at
char * word_at(char *tString, int upTo, char *dilim) {
int wcount;
char *rString, *temp;
temp= (char *) malloc(sizeof(char) * (strlen(tString)+1));
strcpy(temp, tString);
rString= strtok(temp, dilim);
wcount=1;
while (rString != NULL){
if (wcount==upTo) {
return rString;
}
rString= strtok(NULL, dilim);
wcount++;
}
return tString ;
}
参数:字符串,索引和字符分隔符 return:word:(char *)
答案 2 :(得分:1)
这适用于以null结尾的字符串。但它最后会留下一个悬空的逗号。
void tokenise(char *s, char *d)
{
while(*d++ = *s++) *d++ = ',';
}
如果你已经知道字符串的长度,你可以通过它。这不会留下悬挂的逗号。
void tokenise(char *s, char *d, int length)
{
int i = 0;
while((*d++ = *s++) && ((i++)<(length-1))) *d++ = ',';
}
在这两个示例中,s
是指向源字符串的指针,d
指向输出标记化字符串。由调用代码来确保缓冲区d
指向足够大。
答案 3 :(得分:0)
如果您觉得易于实施,那么这可以帮助您开始
char* split_all( char arr[], char ch )
{
char *new, *ptr;
new = ptr = calloc( 1, 2*strlen( arr ) ); // FIXME : Error checks
for( ; *(arr + 1) ; new++, arr++ )
{
*new = *arr;
new++;
*new = ch;
}
*new = *arr;
return ptr;
}
您可以重复使用,根据您的要求进行优化。它是一个快速而肮脏的解决方案,随时可以解决它..