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

question-closed przekazywanie danych do pliku

Object Storage Arubacloud
0 głosów
302 wizyt
pytanie zadane 11 kwietnia 2020 w C i C++ przez dominik195k Obywatel (1,030 p.)
zamknięte 15 kwietnia 2020 przez dominik195k

Witam mam zadanie aby stworzyc funkcje ktora najpierw liczy wystepowanie danego znaku w argv[1], a nastepnie wypisuje na ekran wyrazy w ktorych ten znak wystepuje dwukrotnie, potem przekazuje je do pliku. najpierw program dzialal normalnie przy dluzszych wyrazach sa jakies problemy, a teraz to juz wgl sie popsul nie wiem o co biega 

#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
/*
• zwracającą liczbę wszystkich wystąpień danego symbolu w pliku tekstowym,
• filtrującą zawartość pliku wejściowego w celu znalezienia wszystkich
wyrazów, w których dany symbol występuje dwukrotnie; wyrazy te
zapisać należy na standardowym wyjściu, a następnie przechwycić je do
pliku (każdy wyraz w nowym wierszu); przyjąć, że wyrazem jest każdy
ciąg znaków oddzielony spacją, tabulacją, końcem linii oraz końcem
pliku.
*/
int zlicz(char *a)
{	char symbol;
	int licznik=0;
	cout << "liczbe wystapien jakiego symbolu zliczyc?";
	cin >> symbol;
	
	for(unsigned int i=0;i<strlen(a);i++)
	{
		if(a[i]==symbol) licznik++;
	
	} 
	return licznik;
}

void filtr(char*a)
{	
	string napis;
	char symbol;
	int licznik=0;
	cout << "wystepowanie jakiego symbolu sprawdzic?";
	cin >> symbol;
	ofstream plik("zadanie5.txt");
	
for(unsigned int i=0;i<strlen(a);i++)
	{
			for(;isspace(a[i])==0;i++)
			{		
					if(i>=strlen(a));
					else
					{
					napis=napis+a[i];
					if(a[i]==symbol)licznik++;
					}
		   			
		    }
		    if(licznik>=2)
			{
			cout << napis << endl;
			plik << napis <<"\t";
			}
			napis.clear();licznik =0;
		    
	}	
	
	
}
int main(int argc,char *argv[])
{
	//...
cout << zlicz (argv[1]);
filtr(argv[1]);
	//...

	return 0;
}

po wywolaniu programu w ubuntu pokazuje mi sie cala linijka ktora przed chwila wpisalem nie mam pojecia dlaczego, program nie liczy prawidlowo(w tym przypadku nie policzyl ze sa 4 wykrzyniki) oraz nie zostal stworzony plik do ktorego mialy byc przekazane wyrazy z dwoma wykrzynikami

komentarz zamknięcia: problem rozwiazany

1 odpowiedź

0 głosów
odpowiedź 11 kwietnia 2020 przez j23 Mędrzec (194,920 p.)
edycja 11 kwietnia 2020 przez j23
size_t filtr(const char* a)
{
    char symbol;
    string napis;
    std::istringstream iss(a);
    size_t max_n = 0;

    ...

    cout << "wystepowanie jakiego symbolu sprawdzic?";
    cin >> symbol;

    while (iss >> napis) {
        size_t n = std::count(napis.begin(), napis.end(), symbol);
        if (n == 2) {
            /* tu zapisujesz 'napis' */
        }
        max_n += n;
    }

    return max_n;
}

 

komentarz 14 kwietnia 2020 przez dominik195k Obywatel (1,030 p.)

Po poprawieniu wciaz mam ten blad

komentarz 14 kwietnia 2020 przez j23 Mędrzec (194,920 p.)

std::ws to manipulator, który ściąga białe znaki ze strumienia wejściowego. Chodzi o to, że jak teraz podasz znak do zliczenia w zlicz, to w strumieniu pozostanie znak końca linii, który zostanie odczytany w filtr, co w efekcie spowoduje, że funkcja nie policzy tego, co trzeba. Manipulator pominie ten znak końca linii.


W parametrze wywołania programu zamiast " daj ', bo !! to komenda historii basha i ona się wykonuje, stąd te g++ lab5.cpp wplecione w ciąg znaków.

komentarz 14 kwietnia 2020 przez dominik195k Obywatel (1,030 p.)
Dzieki! Wszystko juz dziala jak nalezy. Jeszcze gdybys mogl zaspokoic moja ciekawosc i wyjasnic co to bash, i nie zawracam dluzej gitary xD
komentarz 14 kwietnia 2020 przez j23 Mędrzec (194,920 p.)

Bash to domyślny język skryptowy powłoki Linuksa. Wpisz sobie w terminalu !!, zobaczysz, że wykona się ostatnio wpisana komenda (u Ciebie, w momencie wywołania aplikacji, była to komenda kompilacji pliku).

Dla zobrazowaia różnicy między " a ' przykład:

echo "$USER"
echo '$USER'

 

komentarz 15 kwietnia 2020 przez dominik195k Obywatel (1,030 p.)
Dzięki wielkie! Dużo mi wyjaśniłeś :)

Podobne pytania

0 głosów
1 odpowiedź 249 wizyt
0 głosów
1 odpowiedź 600 wizyt
pytanie zadane 3 kwietnia 2019 w JavaScript przez zerakot Obywatel (1,870 p.)
0 głosów
3 odpowiedzi 1,377 wizyt
pytanie zadane 27 czerwca 2018 w PHP przez MakaBresk Obywatel (1,060 p.)

92,556 zapytań

141,404 odpowiedzi

319,562 komentarzy

61,942 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...