我是C的新手,我对sprintf
一无所知,但我无法满足我的要求。
我有一个char *
变量,其中包含如下字符串:
date=2013-12-09 time=07:31:10 d_id=device1 logid=01 user=user1 lip=1.1.1.1 mac=00:11:22:33:44:55 cip=2.2.2.2 dip=3.3.3.3 proto=AA sport=22 dport=11 in_1=eth1 out_1=
我希望输出为
2013-12-09#07:31:10#device1#01#user1#1.1.1.1#00:11:22:33:44:55#2.2.2.2#3.3.3.3#AA#22#11#eth1##
如果某个值在=
之后为空,则它应按顺序打印##
。
答案 0 :(得分:1)
我不打算给你一些确切的代码,但我会给你一些帮助你的链接。
strchr ::你可以在字符串中找到'='的位置。
- 现在,在'='的位置后复制字符串,直到找到'空格'。
- 每当你找到'空格'时,在缓冲区中写一个'#'。
- 继续这样做,直到遇到'\ 0'。遇到'\ 0'
时,将'##'写入缓冲区- 附加'\ 0'。
醇>
Ex :: C function strchr - How to calculate the position of the character?
答案 1 :(得分:0)
例如使用strtok,strchr,sprintf
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
const char *data = "date=2013-12-09 time=07:31:10 d_id=device1 logid=01 user=user1 lip=1.1.1.1 mac=00:11:22:33:44:55 cip=2.2.2.2 dip=3.3.3.3 proto=AA sport=22 dport=11 in_1=eth1 out_1=";
char *work = strdup(data);//make copy for work
char *output = strdup(data);//allocate for output
char *assignment; //tokenize to aaa=vvv
size_t o_count = 0;//output number of character count
for(assignment=strtok(work, " "); assignment ;assignment=strtok(NULL, " ")){
o_count += sprintf(output + o_count, "%s#", strchr(assignment, '=')+1);
}
printf("%s", output);
free(work);
free(output);
return 0;
}