1

次の文字列を変換する関数を作成しようとしています:

1110100010000000101000011000011110000000000000000000000000111101110000110101100111

に:

1110100010000000 1010 0001 1000 0111 1000 0000 0000 0000 0000 0000 0011 1101 1100 0011 0101 1001 11

(4 つの 1 と 0 のグループ)

次のような機能があります。

convert(char *src_buffer,char *dst_buffer,int offset){

}

上記の場合、「オフセット」は 16 です。

これが私がソファーで試したコードです:

char *tmp=(char*)malloc(1000*sizeof(char));
strncpy(tmp,buffer,i);
tmp[i+1]=' ';
for(int j=0;j<sizeof(buffer);j++){
    strcpy(tmp+sizeof(tmp),buffer+(4*j));
    tmp[(5*j)+1]=' ';
}

しかし、それはうまくいきません...

助けてください!私を助けてくれるCの第一人者がそこにいることを願っています。

ここに私が取り組んできたいくつかの更新されたコードがあります:

char *tmp=(char*)malloc(1000*sizeof(char));
strncpy(tmp,buffer,offset);
tmp[offset+1]=' ';
int k=offset+1;
for(int j=i;j<strlen(buffer);j+=4){
    tmp[k]=buffer[j];
    tmp[k+1]=buffer[j+1];
    tmp[k+2]=buffer[j+2];
    tmp[k+3]=buffer[j+3];
    tmp[k+5]=' ';
    k+=5;
}
4

2 に答える 2

3

offset最初の文字を一時バッファにコピーします。次に、残りの元のバッファー内の各文字を 1 つずつループし、それらを一時バッファーにコピーします。4 回のループごとに、一時バッファーにスペースが追加されます。

于 2012-12-04T14:35:32.653 に答える
2

次のようなことを試してください:

int len = strlen(src);
char *dst= malloc(len * sizeof *dst * 2);
/* copy the first (offset) bytes */
strncpy(dst, src, offset); 

for(i=j=offset; j<len; i++, j++){
    /* add a whitespace and once every 5 characters */
    if ((i-offset)%5 == 0) { 
       dst[i++] = ' ';
    }
    dst[i] = src[j];
}
/* null-terminate string */
dst[i]=0;

補足として、すべての文字の後にスペースが続く場合 (そうではありません)、元の文字列の最大 2 倍が必要になるため、1000 バイトを割り当てる必要はありません。

于 2012-12-04T14:45:15.620 に答える