Pole řetězců se samo přepisuje – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Pole řetězců se samo přepisuje – C / C++ – Fórum – Programujte.comPole řetězců se samo přepisuje – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Dutch77
~ Anonymní uživatel
5 příspěvků
22. 10. 2012   #1
-
0
-

Dobrý den,

v C už nějaký čas amatérsky dělám, ale teď jsem se na dost hodin sekl na jednom problému.

Dělám úplně stupidní slovníček... Nějak jsem se to snažil splácat, ale zasek jsem se na tom, že když přidám slovo, tak se sice přidá, ale jakmile přidám jiné nové, tak se přepíše i to předešlé, co jsem přidal. Prosím o radu, díky. :/
 

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <vector>

using namespace std;


void options(void);
void print_dictionary(void);
char *add_word(void);
void find_word(void);

char *dictionary[100];
char cz[15];
char en[15];

    czech[0] = "kocka";english[0] = "cat";
    czech[1] = "pes";english[1] = "dog";
    czech[2] = "kachna";english[2] = "duck";

std::vector<char*> czech(100);
std::vector<char*> english(100);


int main()
{

    dictionary[0] = "auto";
    dictionary[1] = "kachna";
    dictionary[2] = "zidle";

    while(1)
    {
    options();
    }

}



void options(void)
{
    int i;

    cout << "1. Hledat slovo" << endl;
    cout << "2. Vypsat ulozena slova" << endl;
    cout << "3. Pridat slovo do slovniku" << endl;
    cout << "4. Odebrat slovo ze slovniku" << endl;
    cout << "5. Ukoncit program" << endl << endl;


    cout << "Zadejte volbu: ";
    cin >> i;
    cout << endl;

    switch (i) {
        case 1:
        /* 1. Hledat slovo */
        find_word();

        break;

        case 2:
        /* 2. Vypsat ulozena slova */
        print_dictionary();

        break;

        case 3:
        /* 3. Pridat slovo do slovniku */
        add_word();

        break;

        case 4:
        /* 4. Odebrat slovo ze slovniku */

        break;

        default:
        /* 5. Ukoncit program */
        system("CLS");
        break;

        }
}


void print_dictionary(void)
{
    /* Cyklus zjistujici nejblizsi volnou pozici */
    for (int empty_position = 0; czech[empty_position] != 0; empty_position++) {
//////////////// !!!!!!!!!!!!!!!!!!!!!!!!  <- jakmile nejaky smazes, tak jsem v riti :D
        cout << czech[empty_position] << "\t\t\t" << english[empty_position] << endl;
    }
}


char * add_word()
{
    int empty_position;

    // Cyklus zjistujici nejblizsi volnou pozici //
    for (empty_position = 0; czech[empty_position] != 0; empty_position++);

    cout << empty_position << endl;

    cout << "Zadejte ceske slovo: " << endl;
    cin >> cz;
    czech[empty_position] = cz;

    cout << "Zadejte anglicke slovo: " << endl;
    cin >> en;
    english[empty_position] = en;

    for (int empty_position = 0; czech[empty_position] != 0; empty_position++) {
//////////////// !!!!!!!!!!!!!!!!!!!!!!!!  <- jakmile nejaky smazes, tak jsi v riti :D
        cout << empty_position << "\t" << czech[empty_position] << "\t\t\t" << english[empty_position] << endl;
    }


}


void find_word(void)
{
    char word[15];
    int condition = 0;
    cout << "Zadejte slovo, ktere chcete hledat:" << endl;
    cin >> word;

    for(int i = 0;strcmp(word, dictionary[i]) == 0; i++)
        {
        cout << "Anglicky preklad slova " << word << " je: " << dictionary[i] << endl << endl;
        condition = 1;
        }
    for(int j = 0;strcmp(word, dictionary[j]) == 0; j++)
        {
        cout << "Cesky preklad slova " << word << " je: " << dictionary[j] << endl << endl;
        condition = 1;
        }
    if(condition == 0)
        {
        cout << "Zadane slovo slovnik nezna" << endl << endl;
        }
}

Nahlásit jako SPAM
IP: 92.62.224.–
Reklama
Reklama
zlz
~ Anonymní uživatel
634 příspěvků
23. 10. 2012   #2
-
0
-

Načítáš ta slova pořád do stejných polí (cz/en) a ukazatel na ně vkládáš do těch vektorů (czech/english). V poli je tedy poslední zadaná hodnota a všechny (nově přidané) prvky vektoru (ty ukazatele) na ni ukazují.

A nesmyslně mícháš C a C++. Céčkovské pole a ukazatele jsou pro někoho ze začátku příliš složité, zkus to napsat bez nich, tj. žádná pole znaků, žadné ukazatele na znaky, ale std::string.

Nahlásit jako SPAM
IP: 80.188.216.–
Dutch77
~ Anonymní uživatel
5 příspěvků
23. 10. 2012   #3
-
0
-

#2 zlz
Vůbec nemám páru jak... Potřebuju to nějak číslovat, abych mohl přidávat další slova pod nějakým ID, proto se dlabu v poli. :/
Sorry asi jsem moc lama, ale docela mi dochází čas. Nemáte nějaký tip jak to předělat v tomhle smyslu polí, aby ukazatele ukazovaly kam mají?

Nahlásit jako SPAM
IP: 92.62.224.–
hlucheucho+10
Posthunter
23. 10. 2012   #4
-
0
-

asi bych použil strukturu která obsahuje dva stringy - českou a anglickou verzi slova a celý slovník udělal jako vektor těchto struktur.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
KIIV+42
God of flame
23. 10. 2012   #5
-
0
-

tak napriklad  vector< pair<string,string> > list_slov; by mohl bohate stacit...

pridat slovo by se dalo napriklad  list_slov.push_back( pair<string,string>(cesky, anglicky) );

nacitat samozrejme do string cesky,anglicky;  cin >> cesky ; a tak dale

Nahlásit jako SPAM
IP: 62.216.147.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 103 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý