2014-11-14 6 views
0

Я попытался добавить два массива символов или целые массивы. Он работает правильно, только если значения в массиве имеют одну цифру. Если один или оба массива имеют номера с двумя цифрами, я получил неправильный ответ.Добавление двух массивов

Пусть

//n = 3 
a1[n] = "1 2 3" 
a2[n] = "4 5 6" 

я использовал в то время как петля для того ...

while(sizeofarray > i) 
{ 
    result[i]= atoi(&12[i]) + atoi(&a2[i]); 
    i++; 
} 

И я получил правильный ответ.

Но если

a1[n] = "1 10 20" 
a2[n] = "4 5 6" 

результат дополнение будет неправильно.

Каков правильный код для решения этой проблемы. Или, по крайней мере, идея.

+0

Пожалуйста, покажите свой код, как вы вычислили всю вещь. – Rizier123

+0

Должен быть нормализован до операции. – BLUEPIXY

+0

'{1, 10, 20}' означает '11020' или' 1 * 100 + 10 * 10 + 20 * 1' ?? Вы имеете в виду или? – BLUEPIXY

ответ

1

Каждый «элемент» строки 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++; пропустит слишком мало цифр, если не будет добавлено 1-значное число. Кроме того, использование одной переменной (i) для хранения индекса в обеих строках работает только тогда, когда числа в каждой строке начинаются с того же индекса, то есть когда каждый элемент имеет одинаковое количество цифр.

Чтобы это исправить, вам нужно сделать две вещи:

  1. Используйте отдельный указатель на каждый из a1 и a2 массивов. Каждый указатель указывал бы на часть уже прочитанного массива. Таким образом, после чтения двух целых чисел из каждой строки один указатель указывает на конец «10», а другой - на «5».
  2. Используйте strtol function, который возвращает указатель на конец части строки, которую прочитала функция. Затем вы можете использовать этот указатель, чтобы пропустить минус число, а затем (вручную) пропустить прошлые пробелы, пока не нажмете следующую цифру (используйте isdigit) или терминатор NUL.
0

У вас есть массив символов, и цифры, закодированные в строке символов, не распознаются как числа. Это связано с тем, что ваша программа не находит и не выравнивает десятичные знаки во время процедуры добавления.

«10» + «3» будет вызывать что-то в строке «40», если вы не выровняете десятичные знаки вручную. Использование массивов ints решило бы проблему, так как математические процедуры автоматически учитывают выравнивание десятичной точки для всех математических типов.

Чтобы устранить эту проблему, необходимо выполнить рутина

  1. собрать все цифры для первого номера.
  2. Соберите все цифры для второго номера.
  3. (при условии, что вы не имеете дело с десятичными разрядами) выполните добавление назад (с места вверх), при необходимости перенося.
Смежные вопросы