Как сделать строку из отдельных значений int - PullRequest
0 голосов
/ 01 июня 2019

Я пытаюсь создать строку из 3 элементов в следующем формате '0/5'.

int start = 0; int finish = 5;

Я пытался сделать это:

    char string[20];

    string[0] = (char) start;
    string[1] = '/';
    string[2] = (char) finish;

    string[strlen(string)] = '\0';

Но когда я печатаю, я ничего не получаю.

    char buffer[10];
    char aux[5] = {'/', '\0'}; 
    char aux2[5];
    sprintf(buffer, "%d", start);
    strcat(buffer, aux);
    sprintf(aux2, "%d", finish);
    strcat(buffer, aux2);

Это то, что работает, но кажется очень неэффективным.

Ответы [ 4 ]

3 голосов
/ 01 июня 2019

При печати char с использованием printf используется значение ASCII . В этом конкретном случае вы можете использовать

string[0] = (char) (start + '0');
string[1] = '/';
string[2] = (char) (finish + '0');

Или вы можете использовать string[0] = (char) start + 48;. Значение ASCII '0' равно 48.

Или лучше инициализировать start и finish как char start = '0', char finish = '5' и т. Д.

Кроме того, убедитесь, что значения start и finish находятся между 0 и 9. Другие значения дадут вам неожиданные результаты.

Кроме того, последняя строка должна быть string[3] = '\0'. strlen работает путем итерации, пока не встретит \0, и поэтому в этом случае бесполезен.

Демо

0 голосов
/ 01 июня 2019

Код, который вы опубликовали, можно сделать более эффективным, просто заменив последние 4 строки одним sprintf().

    char buffer[10];
    char aux[5] = {'/', '\0'}; 
    char aux2[5] = {'\0'};
    sprintf(buffer, "%d%s%d%s", start, aux, end, aux2);
0 голосов
/ 01 июня 2019
char *tosomething(char *buff, int start, int end)
{
    sprintf(buff, "%d/%d", start, end);
    return buff;
}
0 голосов
/ 01 июня 2019

Если ваши целые числа длиннее 1 цифры, то, возможно, вам следует подумать о том, чтобы использовать что-то вроде sprintf()

char string[20];
int start = 13;
int finish = 21;

sprintf(string, "%d/%d", start, finish);

Это работает точно так же, как printf(), но вместо печати на консоль печатает наСтрока, которую вы поставляете ей.

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