Wie Suche ich ein array von strings in C++
Ich bin ganz neu in der Welt von C++ so, wenn ich nicht Fragen, die Frage richtig ich entschuldige mich im Voraus.
Ich habe eine Hausaufgabe, ich versuche mich komplett in C++. Es hat mehrere Aufgaben, die abgeschlossen werden muss. Hier sind die Aufgaben: 1) Extrahieren Sie Namen aus einer text-Datei. 2) zeigen Sie(unsortiert) 3) zeigen Sie wieder(sortiert) 4) die Suche durch die Liste und finden Sie die Namen beginnen mit demselben Buchstaben, und zählen Sie Sie, und zeigen Sie Sie.
War ich in der Lage zu tun, Nummer 1 bis 3 ohne viel Problem. Aber ich bin ratlos, wie Suche über ein array von strings und Namen suchen, die mit gleichen Buchstaben zu zählen und anzuzeigen? Bitte halten Sie im Verstand ich bin sehr neu in C++ und würde gerne einen Schubs in die richtige Richtung zu erhalten, diese sortiert!!!
Okay, ich war also in der Lage, erstellen Sie eine Funktion, die Sortierung der Namen
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
void selectionSort(string[], int);
void showNames(const string[], int);
void extractNames(string[], int);
bool searchForNames(string[], int);
int binarySearch(const string[], int, char);
int main()
{
const int NUM_NAMES = 20;
string names[NUM_NAMES];
ofstream outputFile;
outputFile.open("names.txt");
outputFile << "Collins, Bill" << endl;
outputFile << "Smith, Bart" << endl;
outputFile << "Allen, Jim" << endl;
outputFile << "Griffin, Jim" << endl;
outputFile << "Stamey, Marty" << endl;
outputFile << "Rose, Geri" << endl;
outputFile << "Taylor, Terry" << endl;
outputFile << "Johnson, Jill" << endl;
outputFile << "Allison, Jeff" << endl;
outputFile << "Looney, Joe" << endl;
outputFile << "Wolfe, Bill" << endl;
outputFile << "James, Jean" << endl;
outputFile << "Weaver, Jim" << endl;
outputFile << "Pore, Bob" << endl;
outputFile << "Rutherford, Greg" << endl;
outputFile << "Javens, Cathy" << endl;
outputFile << "Pike, Gordon" << endl;
outputFile << "Holland, Beth" << endl;
outputFile.close();
//call function that extracts names from the text file and assigns them to
//an array of names so it can be manuplated later
extractNames(names, NUM_NAMES);
//Display names in unsorted order
cout << "Unsorted names are: " << endl;
cout << "------------------- " << endl;
showNames(names, NUM_NAMES);
cout << endl;
cout << endl;
//Sort the names
selectionSort(names, NUM_NAMES);
//Display names in sorted order
cout << "Sorted names are: " << endl;
cout << "----------------- " << endl;
showNames(names, NUM_NAMES);
cout << endl;
searchForNames(names, NUM_NAMES);
}
void showNames(const string array[], int size)
{
for(int count = 0; count < size; count++)
cout << array[count] << endl;
}
void selectionSort(string array[], int size)
{
int startScan;
string MinValue;
int minIndex;
for(startScan=0; startScan < (size-1); startScan++)
{
minIndex=startScan;
MinValue = array[startScan];
for(int index=startScan+1; index < size; index++)
{
if(array[index]<MinValue)
{
MinValue = array[index];
minIndex = index;
}
}
array[minIndex] = array[startScan];
array[startScan] = MinValue;
}
}
void extractNames( string names[], int size)
{
int count =0;
ifstream inputFile;
inputFile.open("names.txt");
while(count<size && getline(inputFile, names[count]))
{
count++;
}
inputFile.close();
}
bool searchForNames(string names[], int size)
{
for (char value = 'A'; value < 'Z'; value++)
{
cout << "Names starting with " << value << " are: "<< endl;
binarySearch(names, 20, value);
}
return true;
}
int binarySearch(const string array[], int elements, char value)
{
//string abc;
//abc=static_cast<string>(&value);
int first = 0, last = elements - 1, middle , position = -1;
bool found = false;
while(!found && first <= last)
{
middle = (first + last) / 2;
if(array[middle] == &value)
{
found = true;
position = middle;
}
else if(array[middle] > &value)
last = middle - 1;
else
first = middle + 1;
}
return position;
}
Ich bin noch nicht in der Lage, dies zu tun wenn: Erstellen Sie eine Funktion zum zählen, wie viele Nachnamen beginnen mit einzelnen Buchstaben und Ausgabe die Namen und die Anzahl der Namen jedes mal. Dieser Funktion übergeben werden sollen das array nach dem Wert und der Größe des Arrays durch Wert. Die Funktion sollte die Ausgabe der Namen, die beginnen mit einem bestimmten Buchstaben geben dann die Gesamtzahl der Namen. NICHT output-Ergebnisse für die Buchstaben, die haben keine Namen, also z.B. es gibt keine Namen, die beginnen mit B, so wird keine Ausgabe erzeugt werden sollen, für diesen Brief. Dies ist mein erstes mal eine Frage bei StackOverflow so, wenn ich kann es nicht erklären, richtig ich entschuldige mich.
- Was macht also der code Aussehen wie bisher?
- Haben Sie schaute auf die
substr
Befehl fürstring
? - Sie sind sortiert. können Sie nicht einfach finden, zuerst Eine, dann die erste B, und qtyOfA = positionFirstB - positionFirstA ? und so weiter für jeden Buchstaben
- diese Frage hat viele Elemente. was Sie jetzt konkret mit zu kämpfen
- ist der erste Buchstabe des Nachnamens der erste Buchstabe der Zeichenfolge?
- ich weiß nicht, wie meine Quellcode hier noch, so dass ich nur änderungen an der original-code. Es sieht sehr aus, ich denke, ich versuche nur, um herauszufinden, wie übergeben Sie den Wert des array-namens, die Namen Weg, so kann ich die Suche nach der richtigen alphabet. das ist der Grund, warum ich versuchte, Sie zu Typumwandlung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein klassisches erste C++ - Zuordnung, und ich nehme an, dass es zu bekommen, Sie verwendet, um die verschiedenen Werkzeuge zur Verfügung, die in der Standard Template Library.
Erstens, Sortieren. Gibt es eine Funktion in der
<algorithm>
header namensstd::sort
dass dies für Sie tun. Überprüfen Sie heraus dieses Referenz zu lernen, ein wenig mehr über ihn. Es ernst wird deine Schmerzen lindern.Für die Suche, versuchen Sie std::find.
Als Nächstes wollen Sie eine Suche, die halten Buchstaben (
chars
) und zählen, wie oft jede vorkommt, wie der erste Buchstabe des namens. Einstd::map<char, int>
ist eine Klasse, die das für Sie übernimmt. Eine einfache for-Schleife mitchar_count[name[0]]++;
, wochar_count
ist eine Karte, die wahrscheinlich ist, was Sie wollen.std::string
definiertoperator[]
, so dass, wenn Sie tun eine lineare Suche, dann nur mit einer Schleife durch das array und überprüfen Sie die Rückgabestr[0]
, wostr
ist dein string.Wenn Sie brauchen, um zu finden alle Spiele die es vielleicht nur einfacher für die Suche Linear durch das array dann eher mit einem binäre Algorithmus. Dieser Ansatz ist Langsamer, aber einfacher zu implementieren und Ihren Kopf um, wenn Ihr neu in C++.
Während Sie sich durch das array, das Sie erstellen können eine Reihe von übereinstimmungen und zurückgeben.
Wenn ich verstehe Schritt 4 richtig, wenn Sie eine Liste haben wollen ("Andrew", "Ann", "Dave", "Dominic", "Don"), die Sie ausgeben möchten so etwas wie: 2 A, 3 D. Richtig?
Wenn das der Fall ist, dann müssen Sie einfach eine Schleife über deine sortierte Liste Prüfung das erste Zeichen in jeder Zeichenfolge. Wenn es das gleiche ist wie das Vorherige Zeichen, erhöhen Sie die Anzahl. Wenn es nicht ist, die Ausgabe des vorherigen Zeichens und zurücksetzen der Zähler. Etwas besonderes übergabe für den Beginn und das Ende der Schleife und fertig.
BTW, ich don ' T sehen die Notwendigkeit, für die binäre Suche, oder gibt es mehr zu dieser Zuordnung?
Etwas wie dies funktioniert