Zamiana samogłosek na kod ASCII

Zamiana samogłosek na kod ASCII
JU
  • Rejestracja:około 4 lata
  • Ostatnio:ponad 2 lata
  • Postów:7
0

Samogłoski w podanych wyrazie należy zamienić na przypisany jej numer w tablicy ASCII. Nie wiem jak odwołać się do konkretnej litery i jak zadeklarować te samogłoski.

Kopiuj
#include <iostream>

using namespace std;

int main()
{
    string w, a, i;
    cout << "Podaj wyraz: ";
    cin >> w;
    if(int w[i]=a, e, y, i, o, u)
        {
            for(int i = 0; i < w.size(); i++)
                cout << int(w[i]) << " ";
        }
}

edytowany 1x, ostatnio: Riddle
NN
  • Rejestracja:około 3 lata
  • Ostatnio:około 3 lata
  • Postów:19
2

Łap szybko rozwiązanie, zanim hejterzy zrobią raban za gotowca:

Kopiuj
#include <iostream>

using namespace std;

static const char vowels[] = "aeiouy";

int main()
{
	size_t len;
	size_t i;
	string w;

	cout << "Podaj wyraz: ";
	cin >> w;

	for (i = 0, len = w.size(); i < len; i++)
		if (strchr(vowels, w[i]) != nullptr)
			cout << int(w[i]) << ' ';
	cout << endl;
}

Tylko przeczytaj kod ze zrozumieniem, jak czegoś nie wiesz, to doczytaj w dokumentacji, bo nie zaliczysz.


Test
several
Rzadko kiedy ktoś tutaj robi raban jak ktoś napisze gotowca, sam takie robiłem. Raban jest wtedy gdy autor tematu chce/wymaga takowego.
vpiotr
i można było zadeklarować wewnątrz for, poza tym spoko.
NN
  • Rejestracja:około 3 lata
  • Ostatnio:około 3 lata
  • Postów:19
0

@_13th_Dragon:

Akurat bez optymalizacji clang wygenerował mi większy segment danych dla ++i niż i++:

Kopiuj
$ diff -up vowels.cc vowels2.cc
--- vowels.cc   Thu Feb 10 01:22:53 2022
+++ vowels2.cc  Thu Feb 10 03:27:48 2022
@@ -14,7 +14,7 @@ int main()
        cout << "Podaj wyraz: ";
        cin >> w;

-       for (i = 0, len = w.size(); i < len; i++)
+       for (i = 0, len = w.size(); i < len; ++i)
                if (strchr(vowels, w[i]) != nullptr)
                        cout << int(w[i]) << ' ';
        cout << endl;
$ c++ -o vowels vowels.cc
$ c++ -o vowels2 vowels2.cc
$ c++ --version
OpenBSD clang version 11.1.0
Target: amd64-unknown-openbsd7.0
Thread model: posix
InstalledDir: /usr/bin
$ size vowels vowels2
text    data    bss     dec     hex
17135   1336    85      18556   487c    vowels
17135   1352    85      18572   488c    vowels2
$

Test
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
0
NB-NN-NP-NK napisał(a):

@_13th_Dragon:

Akurat bez optymalizacji clang wygenerował mi większy segment danych dla ++i niż i++:

Czasy kiedy trzeba było wałczyć za każdy bajt danych/kodu skończyły się jakieś 25 lat temu.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 2x, ostatnio: _13th_Dragon
enedil
Szczególnie kompilując bez optymalizacji lol
obscurity
czasy kiedy trzeba było walczyć o każdy cykl zegara też się skończyły gdzieś wtedy
NN
  • Rejestracja:około 3 lata
  • Ostatnio:około 3 lata
  • Postów:19
1
_13th_Dragon napisał(a):

Czasy kiedy trzeba było wałczyć za każdy bajt danych/kodu skończyły się jakieś 25 lat temu.

Podobnie jak czasy, kiedy trzeba było walczyć o każdy cykl maszynowy lub zegarowy, z wyjątkiem niektórych specyficznych projektów, jak np. przetwarzanie pakietów sieciowych na CPU.

Natomiast istotą mojego komentarza było to, że optymalizacji nie należy wykonywać zgadując, ale mierząc - są do tego odpowiednie narzędzia.

Zgadywanie i opieranie się na utartych schematach może prowadzić do rezultatów przeciwnych do tego, co chcemy uzyskać.


Test
enedil
  • Rejestracja:prawie 12 lat
  • Ostatnio:16 dni
  • Postów:1027
0

@NB-NN-NP-NK:
Mogę się zgodzić z ogólnym założeniem, ale mierzenie takich aspektów ma 0 sensu jak nie patrzysz na zoptymalizowane buildy. A jak podejdziesz do tego uczciwie, skompilujesz z -O2 przynajmniej (bo jak komuś zależy na prędkości to czemu nie używa O2?). To wyjdzie że nie ma absolutnie żadnej różnicy.

NN
  • Rejestracja:około 3 lata
  • Ostatnio:około 3 lata
  • Postów:19
0
enedil napisał(a):

@NB-NN-NP-NK:
Mogę się zgodzić z ogólnym założeniem, ale mierzenie takich aspektów ma 0 sensu jak nie patrzysz na zoptymalizowane buildy. A jak podejdziesz do tego uczciwie, skompilujesz z -O2 przynajmniej (bo jak komuś zależy na prędkości to czemu nie używa O2?). To wyjdzie że nie ma absolutnie żadnej różnicy.

To @_13th_Dragon wkleił linka, gdzie wcześniej napisał o kompilacjach bez optymalizacji...

Niemniej jednak, mierzenie takich aspektów ma sens, np. jeśli mamy kilkadziesiąt cykli zegarowych na przetworzenie pakietu. Wtedy oczywiście najczęściej kompilujemy z optymalizacją.


Test
Zobacz pozostały 1 komentarz
NN
@_13th_Dragon: Ty chyba nie jesteś w stanie znieść myśli, że ktoś inny może mieć rację.
_13th_Dragon
Racje na temat czego? Ze należy się stawiać kloce po środku korytarzu o ile firma zatrudnia sprzątaczkę? Przecież po coś ją zatrudnili, no nie?
_13th_Dragon
Idźmy za ciosem, czemu nie używamy goto? Przecież kompilator to zoptymalizuje!
NN
@_13th_Dragon: Bez sensu. Może być to dla Ciebie nieco zaskakujące, ale programowania nie polega na stawianiu "klocy". Co do goto: otóż używamy. Czasem mniej lub bardziej racjonalnie, ale używamy.
_13th_Dragon
Super, już wszystko z tobą jasne. Idź dalej stawiać kloce w kodzie.
enedil
  • Rejestracja:prawie 12 lat
  • Ostatnio:16 dni
  • Postów:1027
0

Te twoje wyniki są z czapy:

Kopiuj
/tmp $ diff -up a.cc b.cc
--- a.cc	2022-02-10 20:04:09.907535697 +0100
+++ b.cc	2022-02-10 20:04:21.379455761 +0100
@@ -14,7 +14,7 @@ int main()
 	cout << "Podaj wyraz: ";
 	cin >> w;
 
-	for (i = 0, len = w.size(); i < len; i++)
+	for (i = 0, len = w.size(); i < len; ++i)
 		if (strchr(vowels, w[i]) != nullptr)
 			cout << int(w[i]) << ' ';
 	cout << endl;
/tmp [1] $ cat a.cc | clang++ -x c++ - -o a
/tmp $ cat b.cc | clang++ -x c++ - -o b
/tmp $ cmp a b
/tmp $ echo $status
0

Czyli twoja różnica z wielkości sekcji data wynikała z tego, że twoje pliki się różnie nazywały, a to jest umieszczane w generowanym pliku.

Edit: albo już w sumie nie wiem:

Kopiuj
/tmp $ mv a.cc vowels.cc
/tmp $ mv b.cc vowels2.cc

/tmp $ clang++ -o vowels vowels.cc
/tmp $ clang++ -o vowels2 vowels2.cc
/tmp $ clang++ --version
clang version 12.0.1 (Fedora 12.0.1-1.fc34)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
/tmp $ size vowels vowels2
   text	   data	    bss	    dec	    hex	filename
   3817	    708	    632	   5157	   1425	vowels
   3817	    708	    632	   5157	   1425	vowels2

Tak czy inaczej, mocno wątpię, że to przez różnicę i++ a ++i.

edytowany 1x, ostatnio: enedil
NN
  • Rejestracja:około 3 lata
  • Ostatnio:około 3 lata
  • Postów:19
0
enedil napisał(a):

Te twoje wyniki są z czapy:

Nie, moje wyniki nie są z czapy, tylko są z OpenBSD ;-)

Kopiuj
$ c++ -o vowels vowels.cc
$ c++ -o vowels2 vowels2.cc
$ c++ -o a a.cc
$ c++ -o b b.cc
$ size vowels vowels2 a b
text    data    bss     dec     hex
17135   1336    85      18556   487c    vowels
17135   1352    85      18572   488c    vowels2
17135   1352    85      18572   488c    a
17135   1344    85      18564   4884    b
$

:-D


Test
enedil
No to mówię, że z czapy xD
enedil
a to co ja zrobiłem tzn cat a.cc | clang++ -x c++ - -o a, i tak samo dla b?
NN
  • Rejestracja:około 3 lata
  • Ostatnio:około 3 lata
  • Postów:19
0

a to co ja zrobiłem tzn cat a.cc | clang++ -x c++ - -o a, i tak samo dla b?

Kopiuj
$ size a b
text    data    bss     dec     hex
17135   1352    85      18572   488c    a
17135   1352    85      18572   488c    b
$ cmp a b
$

Test
enedil
No to chyba twoje wyjście z "mierzeniem" było tutaj nieuzasadnione?
NN
@enedil: jak najbardziej uzasadnione. Przy czym, aby mieć pewność, należałoby obejrzeć kod wynikowy.
enedil
u mnie cmp nie wykazało różnicy. A u Ciebie to nie wiadomo, bo nie sprawdzasz kodu wyjścia xd
enedil
Plus, odnosiłem się do tego, że fajnie jest mierzyć, ale Twój wynik wcale niczego nie dowodził. Więc argument "zmierzyłem i sekcja data mi wyszła mniejsza" jest niedorzeczny, bo wyszło że różnica nie wynika wcale z i++ vs ++i.
NN
@enedil: czegoś jednak dowodził, ale nie tego, czego byśmy się spodziewali :-)
NN
  • Rejestracja:około 3 lata
  • Ostatnio:około 3 lata
  • Postów:19
1

u mnie cmp nie wykazało różnicy. A u Ciebie to nie wiadomo, bo nie sprawdzasz kodu wyjścia xd

cmp(1) defaultowo drukuje komunikat, jeśli pliki się różnią zawartością:

Kopiuj
aegis# echo -n a > /tmp/a
aegis# echo -n b > /tmp/b
aegis# cmp /tmp/a /tmp/b
/tmp/a /tmp/b differ: char 1, line 1
aegis# cmp /tmp/a /tmp/a
aegis#

Test
enedil
a przepraszam, masz rację
BG
  • Rejestracja:prawie 6 lat
  • Ostatnio:5 dni
  • Postów:289
2

W ramach "humoru z kolokwiów studenckich" - kiedyś zapytałem czym różni się ++i od i++.
Zauważalny procent odpowiedzi był w stylu

Kopiuj
Jak użyjemy i++ to zmienna jest zwiększana na końcu pętli, a jak ++i to na początku

;)

_13th_Dragon
W przypadku "... Zauważalny procent odpowiedzi ..." - może to wina prowadzącego?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.