Каждый «элемент» строки C - это отдельный символ, а не «число» в том смысле, что «10» - это одно число. Например, эти объявления эквивалентны:
char a1[] = "1 10 20";
char a1[] = {'1', ' ', '1', '0', ' ', '2', '0', 0};
char a1[] = {49, 32, 49, 48, 32, 50, 32, 0};
/* The 0 at the end is the NUL terminator, which tells the C library
that the string ends at that point */
Если вы создаете a1
и a2
как массивы, вы можете добавлять соответствующие элементы.
int a1[] = {1, 10, 20};
int a2[] = {4, 5, 6};
Но я предполагаю, что вам нужно анализировать их как строки, и вы не можете просто создавать массивы напрямую, например, считывая данные со стандартного ввода (обычно с клавиатуры) или из файла. Я вижу, вы используете функцию atoi
для преобразования строки в число. Но функция atoi
не возвращает, сколько цифр она проглотила. Таким образом, i++;
пропустит слишком мало цифр, если не добавит однозначные числа. Кроме того, использование одной переменной (i
) для хранения индекса в обеих строках работает только тогда, когда числа в каждой строке начинаются с одного и того же индекса, то есть когда каждый элемент имеет одинаковое количество цифр.
Чтобы исправить это, вам нужно сделать две вещи:
- Используйте отдельный указатель в каждый из массивов
a1
и a2
. Каждый указатель будет указывать на ту часть массива, которая уже была прочитана. Таким образом, после чтения двух целых чисел из каждой строки один указатель будет указывать на конец «10», а другой - на конец «5».
- Используйте
strtol
функцию, которая возвращает указатель на конец части. строки, которую прочитала функция. Затем вы можете использовать этот указатель, чтобы пропустить число, а затем (вручную) пропустить пробел, пока не достигнете следующей цифры (используйте isdigit
) или терминатора NUL.
person
Damian Yerrick
schedule
14.11.2014
{1, 10, 20}
означало11020
или1*100 + 10*10 + 20*1
?? Вы имеете в виду то же самое? - person BLUEPIXY   schedule 14.11.2014temp1
иtemp2
относятся кa1
иa2
? - person lurker   schedule 14.11.2014