Как я могу обрезать и передать массив строк в функцию? - PullRequest
0 голосов
/ 23 октября 2011

Как я могу обрезать строку на части из N чисел символов и затем передать их как массив строк в функцию?

Это часть моей программы, которая преобразует двоичный <-> шестнадцатеричный код.

Я пытался сделать то же самое со строками, но это не сработало.

#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <String.h>

#define MAXDIGITS 8  // 8bits 


int main()
{
    int y;

    printf("Binary-Hex convertor\n");
    printf("Enter the  Binary value : ");
    scanf("%d", &y);

    int i = MAXDIGITS - 1;
    int array[MAXDIGITS];

    while(y > 0)
    {
        array[i--] = y % 10;
        y /= 10;
    }

    printf("%s", "-----------------\n");
    printf("%s", "HEX:");

    int x = array[0];
    int x1 = array[1];
    int x2 = array[2];
    int x3 = array[3];
    int x4 = array[4];
    int x5 = array[5];
    int x6 = array[6];
    int x7 = array[7];

    char buffer[50];
    char buffer2[50];
    char buffer3[50];
}

Ответы [ 2 ]

1 голос
/ 23 октября 2011

Если это просто двоичный код в шестнадцатеричном виде из строки, тогда это намного проще ....

char *input_string = "1001010101001010";
int count = 0;
int value = 0;

while ( *input_string != '\0' )
{
    // Might be worth checking for only 0 and 1 in input string
    value <<= 1;
    value |= (int)((*input_string--) - '0');

    if ( ++count == 8 || *input_string == '\0' )
    {
        // USE value to print etc, if you want to display use 
        // the following else you could store this in an array etc.
        printf("%x ", value);
        count = 0;
        value = 0;
    }
}
0 голосов
/ 23 октября 2011

Вы должны завершить строки нулем, есть ли у вас ограничение на использование этой памяти. Вам нужно правильно распределить память и т.д.? Немного больше информации было бы полезно

const char *input_string = "HELLO THIS IS SOME INPUT STRING";
int N = 4; // The number to split on

// Work out how many strings we will end up in
int number_of_strings = (strlen(input_string) + (N - 1)) / N;

// ALlow for an extra string if you want to null terminate the list
int memory_needed = ((number_of_strings + 1) * sizeof(char *)) + (number_of_strings * (N + 1));
char *buffer = malloc(memory_needed);
char **pointers = (char **)buffer;
char *string_start = (buffer + ((number_of_strings + 1) * sizeof(char *));
int count = 0;

while ( *input_string != '\0' )
{
    // Fresh string
    if ( count == 0 )
    {
        *pointers++ = string_start;
        *pointers = NULL;  // Lazy null terminate
    }

    // Copy a character
    *string_start++ = *input_string++;
    *string_start = '\0';  // Again lazy terminat     

    count++;

    if ( count == N )
    {
        count = 0;
        string_start++; // Move past the null terminated string
    }
}

Затем вы можете передать (char **) буфер; к рутине. Я на самом деле не пробовал это, я был ленив в конце строк. Вы можете просто завершить работу в конце подсчета и в конце цикла while. Это не совсем красивый код, но он должен делать свою работу. Немного больше информации о других требованиях может быть хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...