我有一個字串:
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);
輸出是這樣的:
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 ;
}
uj5u.com熱心網友回復:
一方面,您沒有為output. 您需要為 21 個字符分配空間,以便從 復制字符input, 2 用于插入的新破折號, 1 用于空終止符。這需要 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);
在線演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/314992.html
上一篇:C中的指標和陣列-區別
