Можно ли использовать регистр переключения в c для суммирования результатов многих выборов

#c #switch-statement #inorder

#c #switch-statement #внутренний порядок

Вопрос:

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

 switch1 (gateLibrary)
{
case -1:cout<<"*";break;
case  0:cout<<"a";break;
case  1:cout<<"b";break;
case  2:cout<<"c";break;
             .
             .
             .
case  n:cout<<"z";break;
}
example output: a*b*c
  

Этот код выводит элементы, выбранные из стека gateLibrary. например, a * b * c, если a, b и c выполняются в своих случаях. Теперь, если a имеет стоимость 5, b имеет стоимость 3, а c имеет стоимость 2, и я хочу использовать другой переключатель для вывода общей стоимости как 10, возможно ли это? Я попробовал что-то подобное для точного решения, приведенного выше.

 switch2 (gateLibrary)
{
case -1:cout<<" ";break;
case  0:cout<<"5";break;
case  1:cout<<"3";break;
case  2:cout<<"2";break;
             .
             .
             .
case  n:cout<<"n";break;
}
example output: 5 3 2 //but i need sum as 10 to be printed here
  

любая помощь будет оценена с использованием чего-либо подходящего, не обязательно переключателя. Спасибо

Комментарии:

1. Должны ли мы понимать, что в ваших примерах ваш код находится в каком-то while цикле или другой конструкции, которая проходит сначала gateLibrary=0 , затем gateLibrary=1 и т.д.?

2. Поиск по таблице или таблица подстановки. Вы можете создать таблицу сопоставления для сопоставления целых чисел с буквами (простой массив) или вы можете сделать что-то более сложное, например, с помощью std::map .

Ответ №1:

В библиотеке c нет анализатора выражений, поэтому вы не можете использовать строку «5 3 2 » или что-то еще и в конечном итоге получить 10 без самостоятельного разбора строки. Я думаю, вы также неправильно понимаете, что метки case могут иметь произвольные значения, поэтому вы можете просто указать каждой метке «стоимость», которую вы хотите для каждого «элемента».