Descripción del problema
Como policía de Internet, su tarea es monitorear los correos electrónicos para ver si hay palabras clave sensibles. Sin embargo, algunos sospechosos criminales astutos cambiarán el orden alfabético de ciertas palabras para evitar la inspección. Escriba un programa para encontrar las palabras clave de esta secuencia ajustada. Hay dos líneas de entrada para el programa, la primera línea es la lista de palabras clave y la segunda línea es la oración que se debe verificar. El resultado del programa son las palabras clave ajustadas que se encuentran en la oración. (Las palabras son todas minúsculas, separadas por un espacio entre palabras, y el número de palabras en cada línea es ilimitado)
Entrada:
pistolas, minas, misiles,
aameric, ssell, ajustado, dan iimsssle o sit neeemis,
salida:
pistolas, misiles
Los pensamientos también son buenos:
Guarde cada palabra clave en la primera fila y luego ordene cada palabra clave.
Guarde cada palabra en la oración que se va a verificar en la segunda línea, ordene cada palabra y luego juzgue si son iguales a las palabras clave ordenadas arriba. Si son iguales, escriba las palabras clave originales sin clasificar.
Entonces es cómo extraer cada línea de cadenas separadas por espacios.
Luego aprendí el método istringstream en C ++ .
Referencia de https://blog.csdn.net/jacky_chenjp/article/details/70233212
El uso específico es el siguiente
1 #include <bits / stdc ++. H> 2 usando el espacio de nombres std; 3 int main () { 4 string str = " aa bb cc dd ee " ; 5 istringstream es (str); // Crear objeto istringstream es 6 // y Al mismo tiempo, bind is y string str 7 string s; 8 while ( is >> s) { // Escribir la cadena se lee desde str a la cadena s 9 cout << s << endl; 10 } 11 retorno 0; 12 }
Resultados corrientes del programa
Código de CA para esta pregunta, reproducido de https://blog.dotcpp.com/a/66682
1 #include <bits / stdc ++. H> 2 usando el espacio de nombres std; 3 int main () { 4 string str1, str2; 5 getline (cin, str1); // Almacene la primera línea de palabras clave 6 getline (cin, str2 ); // almacena la oración a verificar en la segunda línea 7 vector < string > s1, s2, s3; 8 // s1 almacena la palabra clave 9 // s2 almacena la palabra clave ordenada 10 // s3 almacena la palabra clave ordenada palabras en una frase a ser examinados 11. un istringstream Strl (str1), str2 en (str2); // bind 12 es de cadena TEMP; 13 while (Str1 >> temp) { 14 s1.push_back (temp); 15 s2.push_back (temp); 16 } 17 while (Str2 >> temp) { 18 s3.push_back (temp); 19 } 20 para ( int i = 0 ; i <s3.size (); i ++ ) { 21 // 将 vector <string> s3 中 的 每 一个 string 元素 s3 [i] 排序 22 sort (s3 [i] .begin (), s3 [i] .end ()); 23 } 24 para ( int i = 0 ; i <s2.size (); i ++) {// Recorrer cada elemento en s2 25 sort (s2 [i] .begin (), s2 [i] .end ()); // Ordenar cada elemento en s2 26 para ( int j = 0 ; j <s3.size (); j ++) { // Atraviesa s3 27 if (s3 [j] == s2 [i]) { // Si los elementos en s3 después de ordenar son iguales a los elementos en s2 después de ordenar 28 cout << s1 [i] << " " ; // genera palabras clave sin clasificar en s1 29 } 30 } 31 } 32 return 0 ; 33 }