Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Sprawdzanie powtórzeń wyrazów

Ostatnio zmodyfikowano 2015-04-18 15:33
Autor Wiadomość
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óż.
C/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??
P-128596
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.
P-128620
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.
P-128626
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
P-128667
Monika90
» 2015-03-18 10:28:35
Jakie ładne haiku.
P-128670
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 :

C/C++
#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.
P-131117
« 1 »
  Strona 1 z 1