27 sty 22:05
27 sty 22:13
Metis: Nie.
27 sty 22:14
lolek: pytanie
1, Czy potrafisz analizować każdy element tabeli ? ( chodzi mi czy umiesz w kodzie zrobić
tak, ze każdy
element porównywany )
2. Czy potafisz usuwać elementy tablicy ?
27 sty 22:20
Metis: Krzysiek ,
Dziadku?
27 sty 22:23
Metis: Napisane.
27 sty 22:28
lolek: brawo
27 sty 22:29
jc:
void usun(int pocz, int kon, char tekst[]){
while( tekst[pocz++] = tekst[kon++] );
}
27 sty 22:31
27 sty 22:46
Dziadek Mróz:
A funkcję to piszesz:
char *usunlitery(char *napis, int rozmiar, int pocz, int kon)
{
char *wynik = NULL;
...
return wynik;
}
27 sty 22:49
jc: No tak, ja usuwałem wszytko, nie tylko litery...
27 sty 22:50
27 sty 22:56
Metis: Jezeli na pozycji i znajduje sie litera to w jej miejsce skopiuj znak przed nią
Jeśli znajduje sie inny znak niz litera zwieksz licznik o 1.
27 sty 22:57
Dziadek Mróz:
To c czy c++?
27 sty 23:07
Metis: Możecie mi pomóc tutaj:
Czemu to nie działa?
http://pastebin.com/r3dbZytg
Widzę to tak:
Podajemy tekst np. Ala
Następnie ilosc długosc zadanego tekstu: czyli np 8
Mamy wiec umiescic 5 spacji na koncu.
Do komórki tablicy długość +1 = 4 wstawiam spacje
zwiekszam długosc o 1
na miejsce 5 wstawiam spacje
i tak, aż długość nie równa się zadanej długosci 8.
27 sty 23:07
Metis: C++, ale nie mogę uzywać biblioteki Cctype i stringów.
27 sty 23:08
Dziadek Mróz:
no to:
std::string napis;
...
if (isalpha(napis[i]))
napis.erase(i);
27 sty 23:19
Dziadek Mróz:
to tak jak pisałem wyżej, char *napis i kopiowanie do char *wynik
27 sty 23:19
Dziadek Mróz:
własna funkcja
int isalpha(char ch)
{
return (ch >= 'A' && ch <= 'Z') && (ch >= 'a' && ch <= 'z');
}
27 sty 23:21
27 sty 23:22
Metis: Wiem jak to zrobię... połacze stringi.
27 sty 23:25
Dziadek Mróz:
coś w stylu std::setw(int)
27 sty 23:34
Dziadek Mróz:
std::cout << std::setw(10) << "napis1" << "napis2";
// napis1 napis2
27 sty 23:36
Dziadek Mróz:
Jak działa jak należy to git
27 sty 23:36
jc: Na 70 stronie książki język ANSI C radzą używać funkcji w rodzaju isalpha() itd.
wyjaśniając, że pewne zasady mogą nie obowiązywać w innym kodowaniu niż ASCII.
27 sty 23:46
Metis: Nie działa
http://prntscr.com/e18nma
Teraz zamysł jest taki:
Tworze tablice o takiej wielkości o ile ma zostać dodana ilości spacji na końcu łańcucha.
Nastepnie wypełniam ją spacjami.
I chce połaczyć te dwie tablice , ale wyrzuca bład
27 sty 23:46
Metis: jc dzięki, ale Profesor zakazał Nam używania tej biblioteki i nie mogę
27 sty 23:47
jc: Metis, a nie ładniej byłoby wprowadzić dane do funkcji jako parametry wywołania,
a nie tylnymi drzwiami.
28 sty 00:05
Metis: Co masz na myśli
jc?
28 sty 00:08
jc:
void uzupelnienie(char tab[], int n){
int i = 0;
while( tab[i] ) i++;
while( i < n ) { tab[i]=' '; i++; }
tab[i] ='\0';
}
28 sty 00:09
jc: Chodzi o to, że Twoja funkcja pobiera jakieś parametry i dodatkowo zadaje pytania
użytkownikowi, co więcej, sama co mówi do użytkownika.
Gdyby to była funkcja przeznaczona do komunikacji, to w byłoby dobrze,
ale jak rozumiem, funkcja ma dokonać jakiejś zmiany w tekście.
28 sty 00:12
28 sty 00:12
jc: A możesz powiedzieć co się dzieje? Czyżby na końcu pojawiały się dziwne znaki?
28 sty 00:15
Metis: Tak, dokładnie.
28 sty 00:16
jc: Jeszcze jedno, tworzysz tablicę tab2 operatorem new. Wypadałoby zwolnić pamięć
(wiem, system zwolni sam pamięć po wykonaniu programu, ale tak się nie pisze).
28 sty 00:17
jc: funkcja << rozpoznaje koniec tekstu po zerze (prawdziwym). Jak go nie dopiszesz,
to idzie dalej.
28 sty 00:19
Metis: Tak czy inaczej nie działa.
Dodałem warunek:
if (tab2[i] == '/0') break;
28 sty 00:22
jc: Masz na końcu sam dopisać tab2[i]=0, a nie pytać.
28 sty 00:25
Metis: Już lepiej, ale dwa ostatnie znaki zamiast spacji są "tymi dziwnymi" .
28 sty 00:31
jc: ? Mój program z 0:9 działa poprawnie.
28 sty 00:40
Metis: Działa
jc nie rozumiem tylko tego warunku:
while (tab[i]) i++;
28 sty 00:58
jc: Dopóki tab[i] nie jest końcem, zwiększaj i. Po prostu szukamy końca tab.
28 sty 08:20