![](/img/trans.png)
[英]C Programming - How to change every occurrence of character in a string with another character
[英]Create a string from another string with a character inserted after every nth character in C
我有一个字符串:
012345678901234567890
我希望它分成 7 个块,如下所示:
0123456-7890123-4567890
我写了这段代码:
strcpy(input,"01");
strcat(input,"2345678901234567890");
printf("input is %s\n",input);
char *output = malloc(22 * sizeof(char));
int i = 0;
for (char* c = input; *c != '\0'; c++) {
output[i] = *c;
if (i > 0 && (i % 7 == 0)) {
i++;
output[i] = '-';
}
i++;
}
output[i] = '\0';
printf("output is %s\n",output);
output 是这样的:
input is 012345678901234567890
output is 01234567-890123-456789-0
由于指针是从零开始计数的,所以问题变得复杂了。 我的指针逻辑错误在哪里? 如何使代码适用于任意数量的 septets?
这是我的解决方案。 有没有更清洁的方法?
char *input = (char*) malloc(22 * sizeof(char*));
strcpy(input,"01");
strcat(input,"2345678901234567890");
printf("input is %s\n",input);
int i = 0;
int j = 0;
char *output = malloc(22 * sizeof(char));
for (char* c = input; *c != '\0'; c++) {
output[i] = *c;
j++;
if (j % 7 == 0 && i <22) {
i++;
output[i] = '-';
j = 0;
}
i++;
}
一方面,您没有为 output 分配足够的output
。 您需要为 21 个字符分配空间以从input
复制字符,+ 2 用于插入的新破折号,+ 1 用于 null 终止符。 这需要 24 个字符,但您只分配了 22 个字符的空间。
此外,您将一个变量i
用于两个不同的目的 - 索引到input
和索引到output
。 插入破折号会将索引偏移到output
,这是您的代码的根本问题。 因此,您需要改用两个单独的变量。
尝试这个:
char *input = malloc(22 * sizeof(char*));
strcpy(input, "01");
strcat(input, "2345678901234567890");
printf("input is %s\n", input);
int input_len = strlen(input);
char *output = malloc((input_len + ((input_len - 1) / 7) + 1) * sizeof(char));
int j = 0;
for (int i = 0; i < input_len; ++i) {
if (i > 0 && i % 7 == 0) {
output[j++] = '-';
}
output[j++] = input[i];
}
output[j] = '\0';
printf("output is %s\n", output);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.