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

Układanie wyrazu z ciągu znaków

Ostatnio zmodyfikowano 2017-01-23 00:18
Autor Wiadomość
kubu355
Temat założony przez niniejszego użytkownika
Układanie wyrazu z ciągu znaków
» 2017-01-23 00:02:14
Muszę napisać taki program:

Jan zapisał sobie w pliku zdania (1 zdanie to 1 linia), które chciałby ułożyć z literek i
cyferek, które posiada. Prosi Ciebie o pomoc, które z tych zdań może ułożyć korzystając z tego
zestawu znaków, które wpiszę z klawiatury do Twojego programu. Wielkość liter ma znaczenie!
Wyświetl mu, które zdania może ułożyć. Sam stwórz potrzebny, przykładowy plik.
Przykładowy plik:
Jan
Ala ma kota
Znaki od Jana:
nAjAa
Odpowiedź:
Jan

Udało mi się napisać taki kod, działa on kiedy wyraz jest równy ciągowi znaków, ale kiedy ciąg jest dłuższy wywala program:

C/C++
#include <iostream>
#include <string>
#include <fstream>
#include <regex>
#include <tuple>
#include <utility>
#include<iomanip>

using namespace std;


int main()
{
    string ciag;
    cin >> ciag;
    cout << ciag << endl;
    ifstream plik( "zdania.txt", ios::in );
    if( plik.is_open() )
    {
        while( !plik.eof() )
        {
            string zdanie;
            getline( plik, zdanie );
            cout << zdanie << endl;
            for( int i = 0; i < ciag.length(); i++ )
            for( int j = 0; j < zdanie.length(); j++ )
            if( zdanie[ j ] == ciag[ i ] ||( zdanie[ j ] - 32 ) == ciag[ i ] || zdanie[ j ] ==( ciag[ i ] - 32 ) ||( zdanie[ j ] - 32 ) ==( ciag[ i ] - 32 ) )
            {
                cout << zdanie[ i ];
            }
        }
    }
}
P-156805
Gibas11
» 2017-01-23 00:18:34
Może czegoś nie rozumiem, ale jeśli wielkość liter ma znaczenie to z 'nAjAa' nie da się ułożyć 'Jan', brakuje 'J'.
//edit: Jeśli po prostu się machnąłeś i powinno być tam 'jan', to na Twoim miejscu użyłbym gotowców z STL, ułatwiają trochę sprawę.
C/C++
bool test( const std::string & charset, const std::string & sample ) {
    for( char c: sample ) {
        if( std::count( charset.begin(), charset.end(), c ) < std::count( sample.begin(), sample.end(), c ) ) {
            return false;
        }
    }
   
    return true;
}
Bo tak naprawdę to wystarczy wiedzieć, że zdania nie da się ułożyć, jeśli jakiś znak występuje w nim więcej razy niż w zestawie pobranym z stdin.
P-156806
« 1 »
  Strona 1 z 1