exercism-solutions/cpp/food-chain/food_chain.cpp

79 lines
1.6 KiB
C++

#include "food_chain.h"
#include <string>
namespace food_chain {
using namespace std;
static const char *animals[] =
{"fly", "spider", "bird", "cat", "dog", "goat", "cow", "horse"};
static const char *verse_phrase[] = {
"",
"It wriggled and jiggled and tickled inside her.\n",
"How absurd to swallow a bird!\n",
"Imagine that, to swallow a cat!\n",
"What a hog, to swallow a dog!\n",
"Just opened her throat and swallowed a goat!\n",
"I don't know how she swallowed a cow!\n",
"She's dead, of course!\n"
};
static const int size_of_animals = sizeof(animals) / sizeof(*animals);
string verse(int index)
{
string result;
--index;
result += string("I know an old lady who swallowed a ")
+ animals[index]
+ ".\n"
+ verse_phrase[index];
if (index != size_of_animals - 1) {
for (int i = index; i > 0; --i) {
if (i == 2) {
result += "She swallowed the bird to catch the spider "
"that wriggled and jiggled and tickled inside her.\n";
}
else {
result += string("She swallowed the ")
+ animals[i]
+ " to catch the "
+ animals[i-1]
+ ".\n";
}
}
result += "I don't know why she swallowed the fly. "
"Perhaps she'll die.\n";
}
return result;
}
string verses(int from_index, int to_index)
{
string result;
for (int i = from_index; i <= to_index; ++i)
result += verse(i) + '\n';
return result;
}
string sing()
{
return verses(1, 8);
}
}