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

Czy da się zamienić, lub zdefiniować stringa jako numer? C++

Object Storage Arubacloud
0 głosów
582 wizyt
pytanie zadane 19 stycznia 2019 w C i C++ przez Fizek78 Nowicjusz (170 p.)
Witam, ponownie przychodzę z pytaniem tym razem innym. Czy da się W c++ zdefiniować string jako jakiś numer? Załóżmy, że chce by "pn" to była 1, "wt" = 2, "śr" = 3 itp. Potrzebuje tego by sortować tablice po tych stringach, dlatego, że aflabetycznie w tym przypadku nie będzie chronologicznie.
komentarz 19 stycznia 2019 przez j23 Mędrzec (194,920 p.)
Wydaje mi się, że parę dni temu dałem Ci funkcję porównującą według dni. Co w niej nie tak?
komentarz 19 stycznia 2019 przez Fizek78 Nowicjusz (170 p.)

Nie mam pojęcia jak ją zaimplementować teraz do mojego kodu. Mam gotową tablicę w której posiadam wszystkie wiersze 

#include "pch.h"
#include <iostream>
#include <string>
#include <cstdlib>
#include <fstream>
#include <sstream>
using namespace std;
struct dane                  //struktura z danymi i wskaznikiem na nastepny element
{
	string godzina;
	string dzien;
	string grupa;
	string nazwisko;
	string przedmiot;
	dane *nast;
};

typedef dane* lista;
lista glowa = NULL;
lista wsk = NULL;
void dodawanie(lista &glowa, string godzina, string dzien, string grupa, string nazwisko, string przedmiot); // dodawanie nowego elementu do listy
void zapisz(lista glowa);//zapisywanie listy do osobnego pliku
void sortowanie(string **tab,int n);
int main(){
	fstream plik, plik2, plik3;
	string sciezka, linijka;
	cout << "Wpisz nazwe/sciezke do pliku zawierajcego dane:";
	cin >> sciezka;
	plik2.open(sciezka);
	int t = 0;
	while (!plik2.eof()) {
			getline(plik2, linijka);
			t++;
	};
	plik2.close();
	string **tablica = new string*[t];
	for (int i = 0; i < t; i++) {
		tablica[i] = new string[5];
	};
	plik.open(sciezka);
	string wers;
	string godzina, dzien, grupa, nazwisko, przedmiot;
	string a, b;
	int n = 0;
	while (!plik.eof()) {
		getline(plik, wers);
		istringstream is(wers);   //dzielenie wersu  na czesci
		is >> godzina >> dzien >> grupa >> nazwisko >> przedmiot;
		tablica[n][0] = godzina; tablica[n][1] = dzien; tablica[n][2] = grupa; tablica[n][3] = nazwisko; tablica[n][4] = przedmiot;
		n++;
	}
	sortowanie(tablica, t);
	int k = 0;
	for(int r=0;r<t;r++) {
		godzina = tablica[k][0];
		dzien = tablica[k][1];
		grupa = tablica[k][2];
		nazwisko = tablica[k][3];
		przedmiot = tablica[k][4];
		dodawanie(glowa, godzina, dzien, grupa, nazwisko, przedmiot);
		k++;
	};
	zapisz(glowa);
	return 0;
}
void sortowanie(string **tab, int n) {
	string temp[5];
	//for(int k=0;k<n-1;k++){
		for (int i = 0; i < n - 1; i++) {
			if (tab[i][1] > tab[i + 1][1]) {
				temp[0] = tab[i][0];
				temp[1] = tab[i][1];
				temp[2] = tab[i][2];
				temp[3] = tab[i][3];
				temp[4] = tab[i][4];
				tab[i][0] = tab[i + 1][0];
				tab[i][1] = tab[i + 1][1];
				tab[i][2] = tab[i + 1][2];
				tab[i][3] = tab[i + 1][3];
				tab[i][4] = tab[i + 1][4];
				tab[i + 1][0] = temp[0];
				tab[i + 1][1] = temp[1];
				tab[i + 1][2] = temp[2];
				tab[i + 1][3] = temp[3];
				tab[i + 1][4] = temp[4];

			}
		}

	//}
}

void dodawanie(lista &glowa, string godzina, string dzien, string grupa, string nazwisko, string przedmiot) // dodawanie nowego elementu do listy
{
	glowa = new dane;
	glowa->godzina = godzina;
	glowa->dzien = dzien;
	glowa->grupa = grupa;
	glowa->nazwisko = nazwisko;
	glowa->przedmiot = przedmiot;
	glowa->nast = wsk;
	wsk = glowa;
};
void zapisz(lista glowa)//zapisywanie listy do osobnego pliku
{

	lista kolejny;
	kolejny = glowa;
	while (kolejny != NULL)
	{
		fstream plik_wyjsciowy;
		plik_wyjsciowy.open(kolejny->nazwisko + ".txt", ios::out | ios::app);
		plik_wyjsciowy << kolejny->godzina << " ";
		plik_wyjsciowy << kolejny->dzien << " ";
		plik_wyjsciowy << kolejny->grupa << " ";
		plik_wyjsciowy << kolejny->przedmiot << endl;
		kolejny = kolejny->nast;
	}
	cout << "\n";
};

 

komentarz 19 stycznia 2019 przez j23 Mędrzec (194,920 p.)

Nie wiem, po cholerę zastosowałeś tę tablicę wielowymiarową? Spokojnie mogłeś zrobić tablicę struktur dane.

 

Tak zrób:

dane *tab;
/* 
	tworzysz n-elementową tablicę 'tab' i wypełniasz ją danymi z pliku 
*/


std::sort(tab, tab + n, [](const dane &d1, const dane &d2) -> bool
	{
		const char* days = "pn,wt,sr,cz,pt,sb,nd";
		return strstr(days, d1.dzien.c_str()) < strstr(days, d2.dzien.c_str());
	});

 

komentarz 19 stycznia 2019 przez mokrowski Mędrzec (155,460 p.)
Jeśli naprawdę nie wiesz jak zastosować radę @j23, możesz "boleśnie łopatologicznie" zdefiniować tablicę z dniami tygodnia i przeszukać ją od początku. Numer znalezionego indeksu będzie numerem dnia. Jak nie pasuje Ci że będzie występowało zero, dodaj jeden. BTW dzień tygodnia najczęściej jest polem enumeratywnym a nie jakimś stringiem.
komentarz 19 stycznia 2019 przez Fizek78 Nowicjusz (170 p.)
Rzeczywiście, mogłem zrobić taką tablice, po prostu już męczę sie troche z tym projtekem i nawet o takich rzaczach zapominam, Dziękuję. Możesz mi wytłumaczyć dokładniej co robi funkcja?
komentarz 19 stycznia 2019 przez j23 Mędrzec (194,920 p.)

Sortuje -> std::sort.

komentarz 19 stycznia 2019 przez Fizek78 Nowicjusz (170 p.)
Dziękuję bardzo, teraz musze sie jeszcze zająć tym, że gdy dzień jest taki sam to sortować wg. godziny ale z tym już chyba dam sobie rade sam.
komentarz 19 stycznia 2019 przez j23 Mędrzec (194,920 p.)

Dość prosto możesz to przerobić:

int res = strstr(...) - strstr(...);
if(res != 0) return res < 0;

/* porównujesz godz., min. */

 

1 odpowiedź

0 głosów
odpowiedź 22 stycznia 2019 przez profesorek96 Szeryf (91,420 p.)
Poczytaj o czymś takim jak mapa inaczej zwana tablica asocjacyjna lub słownik. Jest to struktura danych która ma dwie rzeczy 1 to klucz a druga to wartość. Klucz i wartość mogą być dowolnych typów.

Podobne pytania

0 głosów
1 odpowiedź 453 wizyt
pytanie zadane 28 maja 2016 w C i C++ przez programer Obywatel (1,190 p.)
0 głosów
5 odpowiedzi 46,637 wizyt
pytanie zadane 16 sierpnia 2015 w C i C++ przez szymek6786 Początkujący (260 p.)
0 głosów
4 odpowiedzi 643 wizyt
pytanie zadane 5 stycznia 2016 w C i C++ przez sialekk Nowicjusz (170 p.)

92,568 zapytań

141,422 odpowiedzi

319,641 komentarzy

61,957 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!

...