我有一个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)
你知道你想要(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)
仔细看看,如果您有其他问题,请告诉我.
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |