C中的字符串操作(替换和插入字符)

时间:2013-12-09 07:51:01

标签: c string printf

我是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##

如果某个值在=之后为空,则它应按顺序打印##

2 个答案:

答案 0 :(得分:1)

我不打算给你一些确切的代码,但我会给你一些帮助你的链接。

strchr ::你可以在字符串中找到'='的位置。

  
      
  1. 现在,在'='的位置后复制字符串,直到找到'空格'。
  2.   
  3. 每当你找到'空格'时,在缓冲区中写一个'#'。
  4.   
  5. 继续这样做,直到遇到'\ 0'。遇到'\ 0'
  6. 时,将'##'写入缓冲区   
  7. 附加'\ 0'。
  8.   

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;
}