![](/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.