Terkadang untuk urusan string agak rada tricky, dan sering ngebug, sekarang kita akan membahas cara yang baik dan benarnya.
| Level | Beginner |
| Type |
|
| Requirement |
|
| Similar |
|
Input
Pascal
Baca sebaris kalimat sampai end of line
Misalkan inputnya adalah sebaris kalimat
Ali Jaya Meilio unyu.
Untuk mendapatkan seluruh data berupa array of char untuk sebaris kalimat paling mudah menggunakan ini:
readln(a); // string / array of char
Jika ingin lebih ribet, kita bisa membuat fungsi yang membaca satu per satu karakter untuk mengambilnya, fungsinya sebagai berikut.
function getString() : string;
var
c : char;
begin
getString := '';
read(c); // baca karakter awal
while(true) do
begin
getString := getString + c;
if(eoln) then // kalau sudah sampai ujung di break
begin
readln();
break;
end;
read(c); // baca karakter selanjutnya
end;
end;
Baca satu kata sampai spasi atau end of line
Terkadang kita hanya cuman membaca satu kata saja, yaitu sebuah urutan huruf non-spasi.Dan sayangnya, di pascal tidak diberikan sebuah fungsi siap saji yang bisa dipakai, sehingga kita perlu membuat fungsi untuk membacanya, yaitu dengan mengecek tiap karakter pas membacanya.
Jadi secara kasar fungsinya seperti berikut (sudah di-comment untuk clarity).
function getWord() : string;
var
c : char;
begin
getWord := '';
read(c); // baca karakter awal
while(eoln or (c = ' ')) do // kita akan mencari karakter yang nonspasi dan non newline
begin
if(eof) then exit; // kalau ternyata dah sampai abis filenya, kita langsung keluar, artinya tidak ada data lagi, prevent infinite loop
if(eoln) then // pindah baris kalau dah sampai ujung
begin
readln();
end;
read(c); // baca karakter berikutnya
end;
while(c <> ' ') do // kalau karakternya bukan spasi kita baca terus
begin
getWord := getWord + c;
if(eoln) then // kalau ternyata sudah sampai ujung, kita ganti baris dan break
begin
readln();
break;
end;
read(c);
end;
end;
Perlu diingat tipe data string hanya bisa menampung sampai 255 indeks, jadi jika kurang panjang, silahkan gunakan array of char
Jika ada cara yang lebih simpel untuk membaca karakter di pascal let me know :D (comment below).
C++
Untuk C++, bisa dibilang lebih simpel tapi tetap agak ribet.
Baca sebaris kalimat sampai end of line
Ini bisa dilakukan dengan banyak cara, cara yang paling gampang adalah menggunakan gets.
gets(s); // char[] sCara di atas hanya bisa digunakan untuk array of char. Oh iya jika ingin memakainya harus menginclude dulu
#include <cstdio>
Oh iya jika ingin menggunakan gets tapi menggunakan string, caranya hampir sama, yaitu sediakan array of char yang pasti cukup menampung input, kemudian barus assign ke string.
char s[1000]; string s2; gets(s); s2 = s;Untuk menggunakan string jangan lupa include
#include <iostream>
Dan cara lain juga adalah menggunakan scanf
scanf("%[^\n]\n", s); // perhatikan tidak ada tanda & di depan variable karena variable adalah array of char
Jika ingin menggunakan string caranya sama, baca dulu di array of char, baru kemudian assign ke string.
char s[1000];
string s2;
scanf("%[^\n]\n", s);
s2 = s;
Cara terakhir yang aku tahu adalah membuat fungsi untuk baca satu per satu karakternya. Tapi karena terlalu ribet, dan saya rasa dua cara di atas itu sudah cukup, ya sudah saya skip. *kodenya hampir mirip dengan pascal caranya.
Baca satu kata sampai spasi atau end of line
Yang ini malahan lebih mudah dibandingkan pascal.
Bisa menggunakan cin atau scanf.
Untuk menggunakan cin, caranya cukup simple.
cin >> s; // string / char[]Jadi variablenya bisa string atau array of char, lebih flexible, tapi lebih lambat dari scanf *katanya.
Untuk yang scanf, juga gak terlalu gimana - gimana.
scanf("%s", s); // char[]
Dia hanya bisa menggunakan array of char, jika ingin menggunakan string, gunakan cara yang sama seperti sebelumnya.char s[1000];
string s2;
scanf("%s", s);
s2 = s;
Dan cara yang lain adalah membuat fungsi manual. Dan ini di skip aja, dua cara diatas udah lumayan bagus menurut saya.
Output
Untuk output tergolong simple, untuk pascal, bisa digunakan write() atau writeln() sesuai kebutuhan.
writeln(s);
Untuk c++, sama juga bisa printf atau cout.
Kalau cout
cout << s << endl;Kalau printf
printf("%s\n", s); // char[]
printf("%s\n", s2.c_str()) // string
That's it...
Lumayan panjang juga ternyata... sampai ketemu di lain kesempatan...
Ciao...
Bang Ali, "string" itu "array[1..255] of char;" indeksnya bukan hanya sampai 100.
BalasHapusoh baru ngeh maksudnya yang mana :p... itu maksudnya bisa pakai array of char atau yang singkatnya pake string doang.
Hapustapi kayaknya jadi ambigu, dan orang bisa salah informasi kalau string itu array[1..100] of char yak ==a...
aku ubah deh :-?...
"untuk menggunakan string, jangan lupa #include"
BalasHapusyang bener tuh "untuk menggunakan string, jangan lupa #include"
dan "untuk menggunakan gets(), jangan lupa #include"
yang bener tuh "untuk menggunakan gets(), jangan lupa #include"
beberapa compiler memang bisa pake gets() cuma dengan #include, tapi dengan melakukan #include doang, kamu melakukan gambling, karena kalo compiler nya gak memperbolehkan, maka kamu jadi submit minimal 2x... begitu juga dengan class string di C++
haish... (untuk post dibawah ini, ganti [ menjadi < dan ] menjadi > )
Hapus"untuk menggunakan string, jangan lupa #include[iostream]"
yang bener tuh "untuk menggunakan string, jangan lupa #include[string]"
dan "untuk menggunakan gets(), jangan lupa #include[cstdio]"
yang bener tuh "untuk menggunakan gets(), jangan lupa #include[cstring]"
beberapa compiler memang bisa pake gets() cuma dengan #include[cstdio], tapi dengan melakukan #include[cstdio] doang, kamu melakukan gambling, karena kalo compiler nya gak memperbolehkan, maka kamu jadi submit minimal 2x... begitu juga dengan class string di C++
wait eh :-?...
Hapusperasaan aku kemaren nyoba include string doang gak bisa pake string... *atau aku salah ya ==a...
trus untuk pake gets itu musti include cstring yak @.@... *agak kurang paham aku gini2an ==a...
aku biasanya include semua :-?... nanti deh aku ganti ==a...
habis include string, tambahin "using namespace std;"
Hapus