Sprawdzanie powtórzeń wyrazów
Ostatnio zmodyfikowano 2015-04-18 15:33
JMII89 Temat założony przez niniejszego użytkownika |
Sprawdzanie powtórzeń wyrazów » 2015-03-16 22:37:48 Witam, chciałem napisać sobie program w którym sprawdzam czy wyraz się powtórzył w danym zdaniu , wtedy zmieniam kolor konsoli. Napisałem na razie coś takiego : Wiem troche brzydki kod ale cóż. HANDLE hOut;
std::string text;
std::cout << "Write text : ";
getline( std::cin, text );
std::vector < std::string > splited = split( text, ' ' );
std::vector < std::string > text2;
if( splited.empty() ) { std::cout << "You didn't wrote any text ! " << std::endl; }
for( int i = 0; i < splited.size(); i++ ) { if( i > 0 ) { text2.push_back( splited[ i - 1 ] ); } for( int j = 0; j < text2.size(); j++ ) { hOut = GetStdHandle( STD_OUTPUT_HANDLE ); if( text2[ j ] == splited[ i ] ) SetConsoleTextAttribute( hOut, FOREGROUND_RED ); std::cout << text2[ i ] << " "; } }
Tylko mam jeden problem . Gdy wpisze np : "Bardzo dlugie dlugie zdanie " . To dostaje potem całe rozwalone zdanie . Wiem ,że dzieje się to tak dlatego , że są dwie pętlę. Ale jakoś nie mam pomysłu , żeb. to napisać inaczej. Jakieś propozycje?? |
|
darko202 |
» 2015-03-17 07:59:49 Czy mógłbyś doprecyzować opis problemu ? tak, aby można było zrozumieć bez domyślania się co autor miał na myśli. |
|
JMII89 Temat założony przez niniejszego użytkownika |
» 2015-03-17 13:49:59 Chodzi o to , że gdy w konsoli napisze np zdanie "To jest bardzo bardzo długie zdanie " . To gdy wypisuje to w pętli for to całe zdanie jest rozwalone . Chodzi o to , że wychodzi coś takiego : "bardzo zdanie bardzo to jest" . Czyli nie jest nawet poukładane. |
|
maly |
» 2015-03-18 07:39:58 jeśli słowa nie było dodaj słowo kolor biały inaczej kolor czerwony wypisz słowo |
|
Monika90 |
» 2015-03-18 10:28:35 Jakie ładne haiku. |
|
JMII89 Temat założony przez niniejszego użytkownika |
» 2015-04-18 15:33:47 Hmm dopiero teraz wróciłem do tego . Bo wcześniej nic z tym projektem nie robiłem i znalazłem rozwiązanie . Jeśli komuś się przyda to tutaj kod : #include <iostream> #include <Windows.h> #include <vector> #include <string> #include <sstream>
std::vector < std::string > split( const std::string & s, char delim ) { std::vector < std::string > elems; std::stringstream ss( s ); std::string item; while( getline( ss, item, delim ) ) { elems.push_back( item ); } return elems; }
bool znajdz( std::string wyraz, int splitowany_pozycja, std::vector < std::string > splitowany ) { int pozycja = 0; for( std::vector < std::string >::const_iterator i = splitowany.begin(); i != splitowany.end(); ++i ) { if( pozycja == splitowany_pozycja ) continue; else if( * i == wyraz ) { return true; } pozycja++; } return false; }
int main() { std::string tekst; std::cout << "Podaj tekst : "; getline( std::cin, tekst ); if( tekst == "" ) { std::cout << "You didn't wrote any text ! " << std::endl; } std::vector < std::string > splitowany = split( tekst, ' ' ); int pozycja = 0; for( std::vector < std::string >::const_iterator i = splitowany.begin(); i != splitowany.end(); ++i ) { std::string wyraz = * i; if( !( znajdz( wyraz, pozycja, splitowany ) ) ) { std::cout << * i << " "; system( "color 07" ); Sleep( 5000 ); } else { std::cout << * i << " "; system( "color 04" ); Sleep( 5000 ); } pozycja++; } system( "pause" ); return 0; }
Lepiej zmienić z windowsowego zmieniania koloru na coś innego bo to do dupy wygląda. |
|
« 1 » |