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

Zamiana liter w zdaniu.

Object Storage Arubacloud
0 głosów
450 wizyt
pytanie zadane 20 października 2016 w C i C++ przez Rafał Gardian Początkujący (310 p.)

Mam pytanie. Czemu w podanym niżej programiku nie następuje zamiana litery a na b w dowolnym zdaniu? Gdzie leży błąd?

 

#include<iostream>
using namespace std;

void f(char*, int);

int main()
{
	int n;
	char* zdanie;
	zdanie = new char[n];
	cout << "Podaj n" << endl;
	cin >> n;
	cin.clear();
	cin.sync();
	cin.getline(zdanie, n);
	f(zdanie,n);
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void f(char* w, int n)
{
	int i=n;
	while(w[i]>0)
	{
		if (w[i]=='a')
			w[i]='b';
		i--;
	}
	cout << w;
}

 

komentarz 20 października 2016 przez DragonCoder Nałogowiec (36,500 p.)
1. Nazwij zmienne w jezyku ludzkim a nie po marsianksu

2. Przerob film o wskaznikach prosze
komentarz 20 października 2016 przez Rafał Gardian Początkujący (310 p.)
Nie wiem co masz do nazw zmiennych. Co jest nie tak ze wskaźnikami?
komentarz 20 października 2016 przez DragonCoder Nałogowiec (36,500 p.)
Zamiast tego n, to number_of_charackters; i zamiast zdanie czy slowo to word, angielskie nazwy i nie zadne literki
komentarz 20 października 2016 przez Rafał Gardian Początkujący (310 p.)
bo?
komentarz 20 października 2016 przez unknown Nałogowiec (39,560 p.)
Bo takie są standardy pisania dobrego kodu.
2
komentarz 20 października 2016 przez Szahid Pasjonat (20,930 p.)
Bez przesady Panowie. Nie czapiajcie się. Niech każdy pisze jak chce. Kolega dopiero się uczy i jeżeli polskie nazwy są dla niego  czytelniejsze to czemu ma ich nie używać
komentarz 21 października 2016 przez Rafał Gardian Początkujący (310 p.)
Standard jest po coś. Rozumiem, że w nazwach pisze się pełne nazwy zamiast pojedynczych liter, żeby program z wieloma zmiennymi był czytelny. Ale to jest przecież mały programik i rzut oka przecież wystarczy żeby wiedzieć co jaka zmienna oznacza! Nazwy pisze się po angielsku zapewne po to, żeby ludzie nie rozumiejący polskiego mogli go łatwiej np. modyfikować. Ale jakie jest prawdopodobieństwo, że tu zajrzy nie-Polak? Moim zdaniem bliskie zeru.
komentarz 21 października 2016 przez DragonCoder Nałogowiec (36,500 p.)
1. Uczymy pisac sie dobry kod od poczatku

2. nie wazne duzy czy maly, tak juz jest, tylko na spoju trzeba trzymac sie tresci polecenia

3. Kazdy kto programuje potrafi raczej angielski, nawet lamany jak ja, ale bedzie bardziej czytelne... Wrzucisz cos na githuba i ktos bedze chcial sprawdzic twoj kod moze go przerobic itd... I jest za przeproszeniem udupiony, jezeli nie jest polakiem

2 odpowiedzi

0 głosów
odpowiedź 20 października 2016 przez Szahid Pasjonat (20,930 p.)
wybrane 20 października 2016 przez Rafał Gardian
 
Najlepsza
8,9,10 linijka

Tworzysz dynamicznie tablice charów n elementową ale n nie ma żadnej wartości. Najpierw wprowadź n a potem stwórz tablice

 

EDIT

25 linijka

ta pętla nie ma prawa działać. Zamień ją najlepiej na for
komentarz 20 października 2016 przez Rafał Gardian Początkujący (310 p.)

n wczytuje cin-em. Dałem teraz

cin >> n;

przed tworzeniem dynamicznej tablicy, ale to nic nie zmienia- dalej nie działa tak jak powinno.

1
komentarz 20 października 2016 przez Szahid Pasjonat (20,930 p.)
#include<iostream>
using namespace std;

void f(char*, int);

int main()
{
    int n;
    char* zdanie;

    cout << "Podaj n" << endl;

    cin >> n;
    zdanie = new char[n];
    cin.clear();
    cin.sync();
    cin.getline(zdanie, n);
    f(zdanie,n);
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void f(char* w, int n)
{

    for (int i=0;i<n;i++)
    {
        if (w[i]=='a')
            w[i]='b';

    }
    cout << w;
}

Jak napisałem wcześniej to pętla while było niepoprawna 

komentarz 20 października 2016 przez Rafał Gardian Początkujący (310 p.)
A racja. Miało być i>0 a nie w[i]>0. Dzięki.
komentarz 20 października 2016 przez Szahid Pasjonat (20,930 p.)
Nie ma za co
komentarz 20 października 2016 przez Rafał Gardian Początkujący (310 p.)
A dokładniej to i>=0.
komentarz 20 października 2016 przez Szahid Pasjonat (20,930 p.)
Nie chce Cie krytykować bo każdy kiedyś zaczynał ale ten numer z pętlą while miał kilka słabych punktów.

1 Pętla nie maiła warunku zakończenia.

2 Zamiast inkrementować i to je dekrementowałeś ( i--)
komentarz 21 października 2016 przez Rafał Gardian Początkujący (310 p.)
edycja 21 października 2016 przez Rafał Gardian
Nie wychodzi na to samo czy inkrementuję, czy dekrementuję?

Warunek zakończenia miała, tylko zły, bo przez pomyłkę napisałem w[i]>0 zamiast i>=0.
komentarz 21 października 2016 przez Szahid Pasjonat (20,930 p.)
Jeśli przypisujesz  zmiennej i numer ostatniego elementu to dekrementujesz. Moje niedopatrzenie
0 głosów
odpowiedź 20 października 2016 przez kacperx123 Początkujący (320 p.)
edycja 20 października 2016 przez kacperx123
Nie jestem ekspertem, ale chyba chodzi o " i-- " z kodu wyczytałem że chcesz zamknąć pętle po jej wykonaniu.

Ale to chyba tak nie działa, w warunku pętli masz zapisane jeżeli Wartość "w" w elemencie tablicy " i " jest równa 0

zakończ pętle. Te "i--" zamiast kończyć pętle odejmuje "1" czyli ten jeden element tablicy w ktorym jest zapisana litera "b".

Ale to tylko moje przypuszczenia, więc mogą być złe (ale nie sądze):D

Podobne pytania

0 głosów
1 odpowiedź 309 wizyt
pytanie zadane 10 marca 2019 w C i C++ przez nowiutki12 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 264 wizyt
pytanie zadane 6 sierpnia 2019 w C i C++ przez magda_19 Gaduła (3,080 p.)
0 głosów
2 odpowiedzi 1,163 wizyt

92,551 zapytań

141,399 odpowiedzi

319,529 komentarzy

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

...