在C中的第五个字符后插入连字符

Djm*_*jmc 0 c linux

我有一个char数组,我想在每五个字符后插入连字符.我尝试了以下代码,但我正在寻找更好的方法来完成这个任务,我应该使用什么字符串函数,以及如何?谢谢.:d

#include <stdio.h>
#include <string.h>
int main()
{
    char str[]="356a192b7913b04c54574d18c28d46e6395428ab";
    char buf[50];

    sprintf(buf, "%.5s-%.5s-%.5s-%.5s-%.5s-%.5s-%.5s-%.5s",str, str+5,str+10,str+15,str+20,str+25,str+30,str+35,str+40);
    printf("%s",buf);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ica 5

你知道你想要(length - 1) / 5连字符.所以对于buf,你需要存储buf[len + (len -1) / 5 + 1];角色.然后简单地循环遍历字符str和(跳过大小写的情况i = 0),如果i % 5 == 0写一个连字符buf 除了复制字符str.

把它放在一起,你可以做类似的事情:

#include <stdio.h>
#include <string.h>

#define HYPHPOS 5

int main(void) {

    char str[] = "356a192b7913b04c54574d18c28d46e6395428ab";
    size_t len = strlen (str);
    char buf[len + (len -1)/ HYPHPOS + 1], *p = buf;

    for (size_t i = 0; i < len; i++) {
        if (i && i % HYPHPOS == 0)
            *p++ = '-';
        *p++ = str[i];
    }
    *p = 0;

    printf ("str : %s\nbuf : %s\n", str, buf);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

您也可以简单地str[i]用作循环测试子句.

示例使用/输出

$ ./bin/hyphenate
str : 356a192b7913b04c54574d18c28d46e6395428ab
buf : 356a1-92b79-13b04-c5457-4d18c-28d46-e6395-428ab
Run Code Online (Sandbox Code Playgroud)

仔细看看,如果您有其他问题,请告诉我.

  • 不应该是`len + len/5`,而不是'%5`? (4认同)