1 (edited by mustofa 30-12-2008 09:10:28)

Topic: C Toolbox: String Processing

Dalam thread ini silahkan dimuat/dibahas fungsi-fungsi C yang pernah anda buat yang berkaitan dengan pengolahan string.

Itu dapat berupa:
* fungsi-fungsi baru;
* fungsi-fungsi standar yang anda perbarui dengan menambahkan fitur-fitur tertentu;
* fungsi-fungsi standar yang akan anda jelaskan logika pemrogramannya.

Fungsi-fungsi tersebut dapat ditulis dalam C atau bahasa lain yang dapat digunakan dari C.

Keterangan tentang sistem operasi dan kompiler yang digunakan dapat ditempatkan di awal posting anda, seperti [LINUX | GCC] atau [DOS | TC].

http://www.id-ddns.net/images/ddns-small.jpg

Re: C Toolbox: String Processing

Header file: string.h
Nama fungsi: strset
Prototipe: char *strset(char *s, int ch)
Kegunaan:
- menetapkan semua karakter string s dengan karakter berkode ch.
- fungsi ini akan mengembalikan alamat string s.

char *strset(char *s, int ch)
{ char *p;

  p = s;
  while (*p)
  { *p = ch;
    p++;
  }
  return s;
}

Contoh:
- strset("KIOS On CD", 'o') hasilnya adalah "oooooooooo".

http://www.id-ddns.net/images/ddns-small.jpg

Re: C Toolbox: String Processing

Header file: string.h
Nama fungsi: strnset
Prototipe: char *strnset(char *s, int ch, int n)
Kegunaan:
- menetapkan n buah karakter string s menjadi karakter berkode ch.
- jika n lebih besar dari panjang string s maka n sama dengan panjang string s.
- fungsi ini akan mengembalikan alamat string s.

char *strnset(char *s, int ch, int n)
{ char *p;

  p = s;
  while (*p && n)
  { *p = ch;
    p++;
    n--;
  }
  return s;
}

Contoh:
- strnset("KIOS On CD", 'o', 4) hasilnya adalah "oooo On CD".
- strnset("KIOS On CD", 'o', 20) hasilnya adalah "oooooooooo".

http://www.id-ddns.net/images/ddns-small.jpg

Re: C Toolbox: String Processing

Header file: string.h
Nama fungsi: strcpy
Prototipe: char *strcpy(char *dest, const char *src)
Kegunaan:
- menyalin semua karakter string src ke dest.
- fungsi ini akan mengembalikan alamat string dest.

char *strcpy(char *dest, const char *src)
{ char *p;

  p = dest;
  while (*src)
  { *p = *src;
    p++;
    src++;
  }
  *p = 0;
  return dest;
}
http://www.id-ddns.net/images/ddns-small.jpg

Re: C Toolbox: String Processing

Header file: string.h
Nama fungsi: strncpy
Prototipe: char *strncpy(char *dest, const char *src, int n)
Kegunaan:
- menyalin n karakter string src ke dest.
- fungsi ini akan mengembalikan alamat string dest.

char *strncpy(char *dest, const char *src, int n)
{ char *p;

  p = dest;
  while (*src && n)
  { *p = *src;
    p++;
    src++;
    n--;
  }
  if (n)
    *p = 0;
  return dest;
}
http://www.id-ddns.net/images/ddns-small.jpg

Re: C Toolbox: String Processing

Header file: string.h
Nama fungsi: strcat
Prototipe: char *strcat(char *dest, const char *src)
Kegunaan:
- menggabung string src ke dest.
- fungsi ini akan mengembalikan alamat string dest.

char *strcat(char *dest, const char *src)
{ char *p;

  p = dest;
  while (*p)
    p++;

  while (*src)
  { *p = *src;
    p++;
    src++;
  }
  *p = 0;
  return dest;
}
http://www.id-ddns.net/images/ddns-small.jpg

Re: C Toolbox: String Processing

Header file: string.h
Nama fungsi: strncat
Prototipe: char *strncat(char *dest, const char *src, int n)
Kegunaan:
- menggabung n karakter string src ke dest.
- fungsi ini akan mengembalikan alamat string dest.

char *strncat(char *dest, const char *src)
{ char *p;

  p = dest;
  while (*p)
    p++;

  while (*src && n)
  { *p = *src;
    p++;
    src++;
    n--;
  }
  if (n)
    *p = 0;
  return dest;
}
http://www.id-ddns.net/images/ddns-small.jpg

Re: C Toolbox: String Processing

Header file: string.h
Nama fungsi: strlen
Prototipe: int strlen(const char *s)
Kegunaan:
- fungsi ini akan mengembalikan panjang string s.

int strlen(const char *s)
{
  int len;

  len = 0;
  while (*s)
  { len++;
    s++;
  }
  return len;
}
http://www.id-ddns.net/images/ddns-small.jpg

Re: C Toolbox: String Processing

Header file: string.h
Nama fungsi: strcmp
Prototipe: int strcmp(const char *s1, const char *s2)
Kegunaan:
- membandingkan string s1 dengan s2.
- fungsi ini akan mengembalikan 0 jika s1 = s2, > 0 jik s1 > s2, atau < 0 jika s1 < s2.

int strcmp(const char *s1, const char *s2)
{ 
  while (*s1 == *s2)
  { s1++;
    s2++;
  }
  return (*s1 - *s2);
}
http://www.id-ddns.net/images/ddns-small.jpg

Re: C Toolbox: String Processing

Header file: string.h
Nama fungsi: strncmp
Prototipe: int strncmp(const char *s1, const char *s2, int n)
Kegunaan:
- membandingkan n karakter string s1 dengan s2.
- fungsi ini akan mengembalikan 0 jika s1 = s2, > 0 jik s1 > s2, atau < 0 jika s1 < s2.

int strncmp(const char *s1, const char *s2, int n)
{ 
  while (*s1 == *s2 && n)
  { s1++;
    s2++;
    n--;
  }
  if (!n)
    return 0;
  return (*s1 - *s2);
}
http://www.id-ddns.net/images/ddns-small.jpg

Re: C Toolbox: String Processing

Header file: string.h
Nama fungsi: strlwr
Prototipe: char *strlwr(char *s)
Kegunaan:
- mengubah semua karakter string s1 ke dalam huruf kecil.
- fungsi ini akan mengembalikan alamat string s.

char *strlwr(char *s)
{
  char *p;

  p = s;
  while (*p)
  { if (*p >= 'A' && *p <= 'Z')
      *p += 0x20;
    p++;
  }
  return s;
}
http://www.id-ddns.net/images/ddns-small.jpg

Re: C Toolbox: String Processing

Header file: string.h
Nama fungsi: strupr
Prototipe: char *strupr(char *s)
Kegunaan:
- mengubah semua karakter string s1 ke dalam huruf besar.
- fungsi ini akan mengembalikan alamat string s.

char *strupr(char *s)
{
  char *p;

  p = s;
  while (*p)
  { if (*p >= 'a' && *p <= 'z')
      *p -= 0x20;
    p++;
  }
  return s;
}
http://www.id-ddns.net/images/ddns-small.jpg

Re: C Toolbox: String Processing

Header file: string.h
Nama fungsi: strchr
Prototipe: char *strchr(const char *s, int ch)
Kegunaan:
- menemukan posisi karakter ch pertama pada string s.
- fungsi ini akan mengembalikan alamat karakter ch jika ditemukan atau mengembalikan NULL jika sebaliknya.

char *strchr(const char *s, int ch)
{
  char *p;

  p = s;
  while (*p)
  { if (*p == ch)
      return p;
    p++;
  }
  return NULL;
}
http://www.id-ddns.net/images/ddns-small.jpg

Re: C Toolbox: String Processing

Header file: string.h
Nama fungsi: strstr
Prototipe: char *strstr(const char *s1, const char *s2)
Kegunaan:
- menemukan posisi substring s2 pertama pada string s1.
- fungsi ini akan mengembalikan alamat substring s2 jika ditemukan atau mengembalikan NULL jika sebaliknya.

char *strstr(const char *s1, const char *s2)
{
  char *p;
  int len;

  p = s1;
  len = strlen(s2);
  while (*p)
  { if (!strncmp(p, s2, len))
      return p;
    p++;
  }
  return NULL;
}
http://www.id-ddns.net/images/ddns-small.jpg

Re: C Toolbox: String Processing

kk mustofa...
gw coba tes yg strcpy koq ga jalan ya...
blank gaada apa2 ny...
malah musti ctrl+pause biar balik ke editor turbo c

#include<stdio.h>
#include<conio.h>
int main()
{
    char *p;
    char a[10];
    char b[]="hallo";
    clrscr();
    p=a;
    while(*b){
     *p=*b;
     p++;
    }
    *p=0;
    printf("%s",&a);
    getch();
    return 0;
}

dmn salahnya tuh kk...

Re: C Toolbox: String Processing

pucuk wrote:

kk mustofa...
gw coba tes yg strcpy koq ga jalan ya...
blank gaada apa2 ny...
malah musti ctrl+pause biar balik ke editor turbo c

#include<stdio.h>
#include<conio.h>
int main()
{
    char *p;
    char a[10];
    char b[]="hallo";
    clrscr();
    p=a;
    while(*b){
     *p=*b;
     p++;
    }
    *p=0;
    printf("%s",&a);
    getch();
    return 0;
}

dmn salahnya tuh kk...

soalnya b gk di-increment, jd hrsnya :

while (*b) {
    *p = *b;
    p++;
    b++;
}

17 (edited by pucuk 10-11-2009 12:51:00)

Re: C Toolbox: String Processing

sarwoko wrote:

soalnya b gk di-increment, jd hrsnya :

while (*b) {
    *p = *b;
    p++;
    b++;
}

udah ak coba...
malah jadi error kk...

Lvalue required in function main

btw ntu apa artinya ya...

Re: C Toolbox: String Processing

pucuk wrote:

kk mustofa...
gw coba tes yg strcpy koq ga jalan ya...
blank gaada apa2 ny...
malah musti ctrl+pause biar balik ke editor turbo c

#include<stdio.h>
#include<conio.h>
int main()
{
    char *p;
    char a[10];
    char b[]="hallo";
    clrscr();
    p=a;
    while(*b){
     *p=*b;
     p++;
    }
    *p=0;
    printf("%s",&a);
    getch();
    return 0;
}

dmn salahnya tuh kk...

Deklarasikan variabel b sebagai pointer atau gunakan variabel bantu sebagai pointer untuk b. Argumen a untuk fungsi printf tidak perlu menggunakan & lagi karena argumen berupa array akan memberikan alamatnya.
Contoh I:

#include<stdio.h>
#include<conio.h>
int main()
{
    char *p;
    char a[10];
    char *b="hallo";  /* b diubah menjadi pointer */
    clrscr();
    p=a;
    while(*b){
     *p=*b;
     b++;  /* b perlu di-increment seperti p */
     p++;
    }
    *p=0;
    printf("%s",a);  /* &a cukup ditulis a saja */
    getch();
    return 0;
}

Contoh II:

#include<stdio.h>
#include<conio.h>
int main()
{
    char *p;
    char *q;  /* p dideklarasikan sebagai variabel bantu untuk b */
    char a[10];
    char b[]="hallo";
    clrscr();
    p=a;
    q=b;  /* q ditetapkan untuk alamat b seperti halnya p untuk a */
    while(*q){
     *p=*q;
     q++;  /* q perlu di-increment seperti p */
     p++;
    }
    *p=0;
    printf("%s",a);  /* &a cukup ditulis a saja */
    getch();
    return 0;
}
http://www.id-ddns.net/images/ddns-small.jpg

Re: C Toolbox: String Processing

sip kk...gw ngerti skrg..jalan udh program nya...hehe..
kk emang tokcer...http://www.laymark.com/i/m/m087.gif

btw dilanjutin lg donk kk c tool box nya..
gw excited bgt nih...

oh ya..klo mo tw detail fungsi2 yg kyk di atas liat dimana ya..?

Re: C Toolbox: String Processing

nanya lagi nih kk mustofa...

gw bikin prog bwt ngitung ada berapa hurup 'a' misalnya dlm suatu string...

#include<stdio.h>
#include<conio.h>

int main()
{
    char *a="anak ayam";
    int i=0;
    while(*a){
     if(*a=='a'){
      i++;
     }
    a++;
    }
    printf("%d",&i);
    getch();
    return 0;
}

koq hasilnya malah -42...
apa yg salah ya kira2...

Re: C Toolbox: String Processing

pucuk wrote:

nanya lagi nih kk mustofa...

gw bikin prog bwt ngitung ada berapa hurup 'a' misalnya dlm suatu string...

#include<stdio.h>
#include<conio.h>

int main()
{
    char *a="anak ayam";
    int i=0;
    while(*a){
     if(*a=='a'){
      i++;
     }
    a++;
    }
    printf("%d",&i);
    getch();
    return 0;
}

koq hasilnya malah -42...
apa yg salah ya kira2...

sebaiknya lakukan sprti ini:

const char *a = "anak ayam";
int count = 0, i = 0;

while (a[i] != '\0') {
    if (a[i] == 'a') {
        ++count;
    }
    ++i;
}
printf("Jumlah 'a' : %d\n", count);

22 (edited by sarwoko 13-11-2009 05:10:00)

Re: C Toolbox: String Processing

ikut nyumbang (bahasa C)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/*
 * menyisipkan 'str' ke dalam 'source' sesuai index 'idx'.
 * bila berhasil akan memberikan nilai balik berupa
 * string hasil penyisipan, bila gagal akan mengembalikan
 * nilai NULL. lakukan pemanggilan free pada string hasil
 * proses bila berhasil. lihat contoh pada fungsi main()
 */
char *insert_string (const char *source, const char *str, int idx)
{
    char      *result = NULL;
    const int src_len = strlen(source);

    if (idx > -1 && idx <= src_len && source != NULL && str != NULL) {
        int result_len = src_len + strlen(str);

        result = (char *)malloc((result_len + 1) * sizeof(char));
        if (result != NULL) {
            if (idx == 0) {
                /* di awal */
                strcat(result, str);
                strcat(result, source);
            } else if (idx == src_len) {
                /* di akhir */
                strcat(result, source);
                strcat(result, str);
            } else {
                strncat(result, source, idx);
                strcat(result, str);
                strcat(result, source + idx);
            }
        }
    }

    return(result);
}

int main (void)
{
    const char *a = "peran";
    const char *b = "coba";
    char       *c = insert_string(a, b, 3);

    if (c != NULL) {
        printf("%s\n", c);
        free(c);
        c = NULL;
    }
    c = insert_string(a, b, 0);
    if (c != NULL) {
        printf("%s\n", c);
        free(c);
        c = NULL;
    }
    c = insert_string(a, b, 5);
    if (c != NULL) {
        printf("%s\n", c);
        free(c);
        c = NULL;
    }

    return(0);
}

string compare dengan menggunakan hash function

#include <stdio.h>

/*
 * http://www.partow.net/programming/hashfunctions/index.html
 * http://en.wikipedia.org/wiki/Fowler-Noll-Vo_hash_function
 */
static unsigned int FNVHash (const char *str)
{
    const unsigned int fnv_prime = 0x811c9dc5;
    unsigned int       hash      = 0;
    unsigned int       cnt       = 0;

    while (str[cnt] != '\0') {
        hash = hash * fnv_prime;
        hash = hash ^ str[cnt];
        ++cnt;
    }

    return(hash);
}

/* strcmp dengan menggunakan hash function */
int my_strcmp (const char *s1, const char *s2)
{
    unsigned int h1 = FNVHash(s1);
    unsigned int h2 = FNVHash(s2);

    if (h2 > h1) {
        int tmp = (int)(h2 - h1);

        return(-tmp);
    }

    return(h1 - h2);
}

int main (void)
{
    printf("%d\n", my_strcmp("Beda", "beda"));

    return(0);
}

Re: C Toolbox: String Processing

pucuk wrote:

nanya lagi nih kk mustofa...

gw bikin prog bwt ngitung ada berapa hurup 'a' misalnya dlm suatu string...

#include<stdio.h>
#include<conio.h>

int main()
{
    char *a="anak ayam";
    int i=0;
    while(*a){
     if(*a=='a'){
      i++;
     }
    a++;
    }
    printf("%d",&i);
    getch();
    return 0;
}

koq hasilnya malah -42...
apa yg salah ya kira2...

Ekspresi &i menyatakan alamat variabel i, jadi pernyataan printf("%d",&i) akan mencetak alamat variabel i.
Jika yang anda maksud adalah mencetak nilai variabel i maka pernyataannya adalah printf("%d", i).

Coba anda baca http://opensource.telkomspeedy.com/foru … 919#p32919 dan posting sesudahnya untuk memahami apa itu nama variabel, nilai variabel, dan alamat variabel.

http://www.id-ddns.net/images/ddns-small.jpg

Re: C Toolbox: String Processing

Thx atas pencerahan nya...
kk sarkowo n kk mustofa....

25 (edited by ardiyan 29-06-2010 20:45:46)

Re: C Toolbox: String Processing

mustofa wrote:

Header file: string.h
Nama fungsi: strncpy
Prototipe: char *strncpy(char *dest, const char *src, int n)
Kegunaan:
- menyalin n karakter string src ke dest.
- fungsi ini akan mengembalikan alamat string dest.

Salam sejahtera Pak Mustofa.

Mau tanya Pak mengenai fungsi string strncpy. Misal ada string =

data = "P123456789"

string tersebut ingin saya pecah menjadi 4 string, antara lain =

header = "P"
data1 = "123"
data2 = "456"
data3 = "789"

Maksud percobaan saya adalah Jika karakter pertama = "P", maka variabel data1, data2 dan data3 boleh ditampilkan. Dan Jika karakter pertama bukan "P", maka variabel data1, data2 dan data3 tidak boleh tampil.
Program yang sudah saya sebagai berikut :

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
unsigned char data[10], data1, data2, data3;
int main()
{
scanf("%s",data);
strncpy(data1,&data[1],3);
strncpy(data2,&data[4],3);
strncpy(data3,&data[7],3);
printf("Data1 = %s\nData2 = %s\nData3 = %s\n",data1,data2,data3);
}

Tapi hasil eksekusi program saya, menghasilkan variabel yang nilainya tidak sesuai dengan yang saya harapkan, hasil program saya sebagai berikut :
misal diberi input "P123456789", akan menghasilkan output :

Data1 = 123456789
Data2 = 456789
Data3 = 789

Jadi hanya variabel data3 yang sesuai dengan keinginan saya.

Yang ingin saya tanyakan.
1. Apakah ada yang salah dengan coding atau algoritma saya?
2. Untuk mengecek kondisi huruf/karakter pertama, pakai fungsi apa Pak? Tipe data nya apa? Agar bisa saya olah menggunakan logika if, sehingga saya bisa mengatur variabel data berapa yang ingin saya tampilkan.

Terima kasih.