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

char*, string, i inne

Object Storage Arubacloud
+1 głos
1,530 wizyt
pytanie zadane 8 maja 2017 w C i C++ przez ChiriChiri Obywatel (1,260 p.)
char* string_merge(char * tekst1, char *tekst2)
{
	
	char* tekst1;
	cin>>tekst1; 
    string tekst1pom = tekst1; 
    
	char* tekst2; 
	cin>>tekst2;
    string tekst2pom = tekst2; 
    
    if(tekst2pom.size()<tekst1pom.size()) swap(tekst2pom,tekst1pom);
    
    int l=tekst1pom.size();
    char* tablica = new char*[l];  .....

Zaczęłam pisać taki kod (odnoszący się do tego zadania ze spoja  http://pl.spoj.com/problems/PP0504B/ ), ale mimo, że czytałam trochę na temat tych charow* itp. ( nawet trafilam na to pytanie https://forum.pasja-informatyki.pl/222031/jak-dziala-char?show=222031#q222031) to i tak nie bardzo rozumiem co ja w tym programie w ogóle piszę i jak właściwie tych funkcji używać? Możnaby njalepiej na jakimś przykładzie, nawet na moim kodzie, czemu to źle, jak powinno być dobrze itp
(nie bardzo wiedziałam, która kategoria jest lepsza więc jednak zostałam w C++ i C a nie spoju) 

1 odpowiedź

0 głosów
odpowiedź 8 maja 2017 przez Marcin_N_97 Stary wyjadacz (10,290 p.)
W takim razie kilka krokó jak to zrobić:

1. Każda wyraz zapisany w tablicy char (przekazując wskaźnik, przekazujesz najprawdopodobniej wskaźnik na pierwszy element tej tablicy - nazwa tablicy) ma na swoim końcu znak '\0'. Dzięki temu wiesz kiedy kończy się wyraz.

2. Mają już tą wiedzę możesz zliczyć ilość znaków w każdym z dwóch wyrazów. Jak? Oddzielnie przejść np. pętlą while, za pomocą arytmetyki wskaźników (można dodawać do nich liczby całkowite) możesz przechodzić po kolejnych literach wyrazu, aż do napotkania znaku '\0'.

3. Wiedząc ile masz znaków (nie licząc '\0') w mniejszym wyrazie musisz stworzyć dwa razy większy + znak '\0'

4. Gdy to masz musisz po prostu zrobić pętle, która jedno słowo przepisuje do parzystych miejsc w tabeli, a drugie do nie parzystych (czyli każde z nich co 2, mając inny element startowy). Pamiętaj by w dopisać znak '\0' w ostatniej wolnej komórce!

 

Jak bys miał jeszcze jakiś problem to śmiało pisz ;)
komentarz 8 maja 2017 przez ChiriChiri Obywatel (1,260 p.)
Szczerze mówiąc, z tego co chciałam się dowiedzieć, to za wiele  się nie dowiedziałam. Jedynie to, że char* to tabela znaków, ale w takim razie co ją nawet odróżnia od takiego stringa?
1
komentarz 8 maja 2017 przez Marcin_N_97 Stary wyjadacz (10,290 p.)
Char to jest zmienna znakowa, przechowująca 1 znak, czyli 1 bajt.

Char[10] jest to tablica 10 takich znaków.

Char * jestot wskaźnik na 1 znak char, aczkolwiek jeżeli mamy tablicę np char[10] to są one w pamięci ułożone pokolei, czyli:

char wyraz[6]="slowo";

cout << wyraz[0] << wyraz[1] << ...(analogicznie) << wyraz[5];

Wypisze nam to slowo na ekran.

Ale mozna to zrobic tez w inny sposob. Dajac wskaznik (wskazuje na miejsce w pamieci, w ktorym zatrzymana jest dana zmienna).

jezeli wezmiemy sobie wskaznik to tablice wyraz[6], czyli:

char * wsk = wyraz;

cout << *(wyraz) << *(wyraz+1) << *(wyraz+2) << ...(analogicznie) << *wyraz(+5);

To otrzymamy to samo co wyzej, bo idziemy po tablicy.

String natomiast jest tak jakby tablica charow, ktora ma zaimplementowana mase mozliwosci, np usuwanie liter z wybranych miejsc za pomoca jednej funkcji, a nie uzywania buforow itd. Polecam Ci obejrzec Mirosława Zelenta na youtubie, ewentualnie poczytac Język C++. Szkoła programowania "Prata".

Podobne pytania

–2 głosów
1 odpowiedź 469 wizyt
pytanie zadane 22 sierpnia 2019 w C i C++ przez niezalogowany
+1 głos
1 odpowiedź 181 wizyt
0 głosów
1 odpowiedź 334 wizyt

92,592 zapytań

141,441 odpowiedzi

319,705 komentarzy

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

...