Просто сделав очень быстрый взгляд, кажется, что вы используете положение буквы в алфавите, чтобы что-то делать.
Вы можете заменить все свои операторы switch одним оператором, который выглядит следующим образом:
int letter = (int)(ActualLetter - 'a');
if(numOfWordsInFile[letter]<maxWordsPerFile){
fout.open(fileName.data(),ios::app);
fout<<word<<" "<<endl;
numOfWordsInFile[letter]++;
if(totalWordsInDict<maxWordsInDict){
totalWordsInDict++;
}
return(Dictionary::success);
}else{
return(Dictionary::failure);
}
ActualLetter - это что-то вроде 'a', например.
В связанной заметке, если в будущем у вас действительно будут большие операторы switch, рассмотрите возможность инкапсуляции кода в функции:
switch (letter)
{
case 'a':
LetterA();
break;
case 'b':
LetterB();
break;
...
}
Или, что еще лучше, вы можете использовать полиморфизм, чтобы C ++ отправляла требуемый метод на основе определенного производного класса:
class BaseLetter
{
...
public:
virtual void DoStuff() = 0;
};
class LetterA : public BaseLetter
{
public:
void DoStuff();
};
class LetterB : public BaseLetter
{
public:
void DoStuff();
};
void Foo(BaseLetter *letter)
{
// Use dynamic dispatch to figure out what to do
letter->DoStuff();
}
Просто обратите внимание, что динамическая отправка имеет (незначительное) снижение производительности, и вышесказанное - очень плохое место для его фактического использования.Решение, которое я, RedX и другие опубликовали, намного лучше подходит для вашего конкретного примера.