Это не ответ на проблемы с типами; это предложение решить проблему по-другому.
Вы хотите заполнить строку всеми числовыми цифрами из входной строки. Для этого нет стандартной функции.
Вы можете использовать strcat
, но эта функция работает с строками, которые должны быть нулевыми. Вы можете создать временную строку из двух символов – одной цифры и одного нуль-терминатора –, но это было бы неэффективно. strcat
также требует, чтобы вы не переполняли буфер символов, к которому вы добавляете.
В таких случаях, как ваш, обычно легче решить проблему на низком уровне, где вы сами создаете массив символов, по одному символу за раз. Например, вы можете перебирать входную строку с i
и скопировать все цифры в строку чисел с помощью второго индекса, j
:
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
int main()
{
size_t size = 12;
char number[size];
const char *input = "Alpha 123/Bravo 456/Charlie 789/Delta 007";
int i, j;
j = 0;
for (i = 0; input[i] != '\0'; i++) {
if (isdigit((unsigned char) input[i]) && j + 1 < size) {
number[j++] = input[i];
}
}
number[j] = '\0';
puts(number);
return 0;
}
Обратите внимание, как код отслеживающих символов в строке чисел и как это делается, чтобы не переполнять буфер. Строка номера может быть усечена, но она всегда будет заканчиваться нулем.
Я также использовал input[i] != '\0'
для обнаружения конца строки (которая, по определению, нуль-терминатор '\0'
) вместо вызова strlen(input)
, который всегда начинает искать терминатор Фро в начале строки.
'символ number_string [размер] = {NULL}; 'не является допустимым объявлением. Это должно быть либо 'char * number_string = NULL;', либо 'char number_string [size] =" mytext "; '. Для чего это? Если вы хотите получить пустую строку, например, 'char number_string [size] =" ";' –
@WeatherVane благодарит. Но темп все еще имеет ошибку. –
@RigelKentCarbonel Как объявляется 'temp'? – ameyCU