using std::cout; using std::cin; using std::endl; using std::sort; using std::string; using std::vector;
int main() { vector<string> names; string name; int antal = 0;
cout << "Type in arbitrary words: "; while (cin >> name) { if (name == "q") break;
names.push_back(name); ++antal; }
sort(names.begin(), names.end());
cout << "Antal: " << antal << endl;
//print the values in vector names to the screen for (int i = 0; i != antal; ++i) { cout << names[i] << endl; }
//nr. m element in the vector is analized for (int m = 0; m != antal; ++m) {
int k = 1;
//nr. n element in the vector is analized for (int n = m+1; n != antal; ++n) {
// if there is two identical words k will be incremented. // when m = 0, names[m-1] = names[-1]... therefore the switch statement. switch (((bool)m)) { case 0: { if (names[m] == names[n]) { ++k; } }
case 1: { if ((names[m] == names[n]) && (names[m] != names[m-1])) { ++k; } } } }
// when element m in the vector has been checked against the others cout << "Der er " << k << " ord paa formen " << names[m] << endl; }
system("PAUSE"); return 0; }
----------------------------------- Dette lille program går mig på nerverne. Beskrivelse: indlæser nogle ord fra tastaturet, hvorefter programmet finder ud af, hvor mange gange de enkelte ord optræder i den vektor de er indlæst i. Ordene sorteres ved hjælp af sort() inden de udsættes 'loop på loop'.
Opgaven er fra bogen Accelerated C++: 3-3
Programmet kompileres uden problemer, men windows kan bestemt ikke lide det. Den kaster en fejlmeddelelse til skærmen og programmet går i stå.
jeg har fået programmet til at virke ved indsætte breaks i den oprindelige switch statement. derudover var jeg nødt til at sætte en ny switch statement ind, hvor outputtet skulle skrives til skærmen:
---------------------------------------------
switch (((bool)m)) { case 0: { cout << "Der er " << k << " ord paa formen " << names[m] << endl; break; }
case 1: { if (names[m] != names[m-1]) { cout << "Der er " << k << " ord paa formen " << names[m] << endl; break; } } }
------------------------------------------
idet programmet ellers skrev til skærmen for hvert element i vektoren selvom nogle elementer var ens
ex.
der er 3 ord på formen kylling der er 1 ord på formen kylling der er 1 ord på formen kylling
Måske noget i stil med: for (int m = 0; m != antal; ) {
int k = 1;
//nr. n element in the vector is analized for (int n = m + 1; n != antal && names[m] == names[n]; ++n, k++) { // Just counting }
cout << "Der er " << k << " ord paa formen " << names[m] << endl; m += k; }
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.