Sagen wir, ich habe einen Vektor, der " '.--', '.....', '-.', '-.-'" enthält.
und ich habe ein Array std::string morse[39] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",".---", "-.-", ".-..", "--.", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", ".----", "..---", "...--", "....-", ".....","-....", "--...", "---..", "----.", "-----", ".-.-.-", "--..--", "..--.."};
Wie würde ich die Elemente aus dem Vektor mit dem Array vergleichen, um zu sehen, ob die Elemente aus dem Vektor einem der Elemente aus dem Array entsprechen und an welcher Stelle sie sich im Array befinden?
Verwenden Sie std::find
auf dem Array. Ein Iterator wird zurückgegeben. Wenn die Zeichenfolge gefunden wurde, verwenden Sie sie, um std::distance
zu bestimmen, wo das Element gefunden wurde.
Hier ist ein Beispiel:
#include <string>
#include <algorithm>
#include <iostream>
int get_morse_position(const std::string& code)
{
static const std::array<std::string, 39> morse = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",".---", "-.-", ".-..", "--.", "-.", "---", ".--.",
"--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", ".----", "..---", "...--", "....-", ".....",
"-....", "--...", "---..", "----.", "-----", ".-.-.-", "--..--", "..--.."};
// search for the item
auto iter = std::find(std::begin(morse), std::end(morse), code);
// if item is found, get the distance from the beginning of the array
if ( iter != morse.end())
return static_cast<int>(std::distance(morse.begin(), iter));
// not found, so return -1
return -1;
}
int main()
{
std::vector<std::string> test = {".--", ".....", "-.", "-.-"};
for (auto& code : test)
std::cout << get_morse_position(code) << "\n";
}
Ausgabe:
22
30
13
10
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen