• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pisze program, który poda liczbę wierszy z pliku txt zawierających pary słów

VPS Starter Arubacloud
+1 głos
744 wizyt
pytanie zadane 18 lutego 2021 w C i C++ przez BedrisK Użytkownik (600 p.)

Piszę program, który poda liczbę wierszy z pliku txt zawierających pary słów, w których pierwsze słowo zawiera się w drugim słowie. Czyli muszę porównywać słowa, jedno do drugie i td.

Oto co na razie napisałem:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
    fstream plik;
    plik.open("slowa.txt", ios::in);

    int i=0;
    string a;

    if(plik.good() == false)
    {
        cout << "Plik jest niedostepny!";
    }
    else
    {
        while(!plik.eof())
        {
            plik >> a;
            i++;
        }
    }

    plik.close();

    for(int j=0; j<i-1; j++)
    {
        cout << endl << a;
    }

    return 0;
}

Nie wiem za bardzo co dalej.

komentarz 19 lutego 2021 przez BedrisK Użytkownik (600 p.)
za nazwe stringu trzeba wstawić a? nie wiem co oznacza '/n'
komentarz 21 lutego 2021 przez BedrisK Użytkownik (600 p.)

@forestG.tmp 

 

komentarz 22 lutego 2021 przez TOWaD Mądrala (6,000 p.)
'\n' sorki
komentarz 22 lutego 2021 przez BedrisK Użytkownik (600 p.)
I jak zrobić aby wyświetlić to ile policzyło

?
komentarz 22 lutego 2021 przez TOWaD Mądrala (6,000 p.)
edycja 23 lutego 2021 przez TOWaD

mokrowski przecież dał odpowiedz, a ja nie zrozumiałem pytania.

Ale jak getline to:


//getline(plik, word1, char{32}); getline(plik, word2, char{32}); getline(plik, resztawiersza);
getline(plik, word1,char{32}); getline(plik, word2);
if (word2.find(word1)!=-1) licznik++;

ale to się nie nadaje do takiego użycia, bo jedna spacja więcej i kicha, ale już do znanych słów składających się też z spacji to po przeróbkach jak najbardzej

 

1 odpowiedź

+2 głosów
odpowiedź 18 lutego 2021 przez mokrowski Mędrzec (156,220 p.)

Troszkę przekombinowałeś.

Wczytywanie par słów można wykonać tak:

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>

int main() {
	std::ifstream file("slowa.txt");
	if (! file) {
		std::cerr << "File open error!\n";
		return EXIT_FAILURE;
	}
	std::string word1, word2;
	while(file >> word1 >> word2) {
		std::cout << word1 << ' ' << word2 << '\n';
	}
	return EXIT_SUCCESS;
}

Teraz trzeba dodać licznik który sprawdzi czy słowo 2 zawiera słowo 1:

std::size_t counter{};
// ...
counter += word2.find(word1) != std::string::npos ? 1: 0;
// ...
std::cout << counter << '\n';

I już :)

komentarz 19 lutego 2021 przez BedrisK Użytkownik (600 p.)
Dziękuje, a czy dało by się to zrobić bez biblioteki <cstdlib> ?
komentarz 19 lutego 2021 przez mokrowski Mędrzec (156,220 p.)
Oczywiście. W zasadzie w samym programie dotyczy ona wyłącznie kodów powrotu EXIT_SUCCESS, EXIT_FAILURE.
komentarz 19 lutego 2021 przez BedrisK Użytkownik (600 p.)
Ok, dziękuje
komentarz 22 lutego 2021 przez BedrisK Użytkownik (600 p.)
A jak wypisać ile polliczył tych podobnych?
komentarz 22 lutego 2021 przez mokrowski Mędrzec (156,220 p.)

Masz wyżej:

std::cout << counter << '\n';

 

Podobne pytania

+1 głos
1 odpowiedź 728 wizyt
0 głosów
1 odpowiedź 363 wizyt
0 głosów
2 odpowiedzi 247 wizyt
pytanie zadane 22 lutego 2019 w C i C++ przez patryk241 Użytkownik (700 p.)

92,786 zapytań

141,718 odpowiedzi

320,661 komentarzy

62,115 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...