Input & Output String

/
6 Comments
Sekarang kita akan membahas tentang input output string / array of char di pascal maupun di C++.
Terkadang untuk urusan string agak rada tricky, dan sering ngebug, sekarang kita akan membahas cara yang baik dan benarnya.

LevelBeginner
Type
  • I/O Processing
Requirement
  • Basic Program Structure
  • Program Flow (if, for, while)
  • Procedure & Function
  • Variable
  • Input & Output Integer
  • Input & Output Char
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[] s
Cara 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...


You may also like

6 komentar:

  1. Bang Ali, "string" itu "array[1..255] of char;" indeksnya bukan hanya sampai 100.

    BalasHapus
    Balasan
    1. oh baru ngeh maksudnya yang mana :p... itu maksudnya bisa pakai array of char atau yang singkatnya pake string doang.

      tapi kayaknya jadi ambigu, dan orang bisa salah informasi kalau string itu array[1..100] of char yak ==a...

      aku ubah deh :-?...

      Hapus
  2. "untuk menggunakan string, jangan lupa #include"

    yang 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++

    BalasHapus
    Balasan
    1. haish... (untuk post dibawah ini, ganti [ menjadi < dan ] menjadi > )

      "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++

      Hapus
    2. wait eh :-?...
      perasaan 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...

      Hapus
    3. habis include string, tambahin "using namespace std;"

      Hapus

alijaya. Diberdayakan oleh Blogger.