Announcement

Yuk ikutan acara gathering Bandung Blog Vaganza, selengkapnya baca disini
  • Index
  •  » C/C++
  •  » C Toolbox: String Processing

#1 30-12-2008 04:52:47

mustofa
Moderator
From: Bandung
Registered: 24-07-2008
Posts: 1573

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].

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


Offline

 

#2 30-12-2008 16:10:56

mustofa
Moderator
From: Bandung
Registered: 24-07-2008
Posts: 1573

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.

Code:

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


Offline

 

#3 30-12-2008 16:12:14

mustofa
Moderator
From: Bandung
Registered: 24-07-2008
Posts: 1573

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.

Code:

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


Offline

 

#4 30-12-2008 16:13:25

mustofa
Moderator
From: Bandung
Registered: 24-07-2008
Posts: 1573

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.

Code:

char *strcpy(char *dest, const char *src)
{ char *p;
  p = dest;
  while (*src)
  { *p = *src;
    p++;
    src++;
  }
  *p = 0;
  return dest;
}

Offline

 

#5 30-12-2008 16:14:38

mustofa
Moderator
From: Bandung
Registered: 24-07-2008
Posts: 1573

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.

Code:

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;
}

Offline

 

#6 30-12-2008 16:16:23

mustofa
Moderator
From: Bandung
Registered: 24-07-2008
Posts: 1573

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.

Code:

char *strcat(char *dest, const char *src)
{ char *p;
  p = dest;
  while (*p)
    p++;
  while (*src)
  { *p = *src;
    p++;
    src++;
  }
  *p = 0;
  return dest;
}

Offline

 

#7 30-12-2008 16:17:27

mustofa
Moderator
From: Bandung
Registered: 24-07-2008
Posts: 1573

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.

Code:

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;
}

Offline

 

#8 30-12-2008 16:18:38

mustofa
Moderator
From: Bandung
Registered: 24-07-2008
Posts: 1573

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.

Code:

int strlen(const char *s)
{
  int len;
  len = 0;
  while (*s)
  { len++;
    s++;
  }
  return len;
}

Offline

 

#9 30-12-2008 16:19:58

mustofa
Moderator
From: Bandung
Registered: 24-07-2008
Posts: 1573

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.

Code:

int strcmp(const char *s1, const char *s2)
{ 
  while (*s1 == *s2)
  { s1++;
    s2++;
  }
  return (*s1 - *s2);
}

Offline

 

#10 30-12-2008 16:21:11

mustofa
Moderator
From: Bandung
Registered: 24-07-2008
Posts: 1573

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.

Code:

int strncmp(const char *s1, const char *s2, int n)
{ 
  while (*s1 == *s2 && n)
  { s1++;
    s2++;
    n--;
  }
  if (!n)
    return 0;
  return (*s1 - *s2);
}

Offline

 

#11 30-12-2008 16:22:29

mustofa
Moderator
From: Bandung
Registered: 24-07-2008
Posts: 1573

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.

Code:

char *strlwr(char *s)
{
  char *p;
  p = s;
  while (*p)
  { if (*p >= 'A' && *p <= 'Z')
      *p += 0x20;
    p++;
  }
  return s;
}

Offline

 

#12 30-12-2008 16:23:34

mustofa
Moderator
From: Bandung
Registered: 24-07-2008
Posts: 1573

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.

Code:

char *strupr(char *s)
{
  char *p;
  p = s;
  while (*p)
  { if (*p >= 'a' && *p <= 'z')
      *p -= 0x20;
    p++;
  }
  return s;
}

Offline

 

#13 30-12-2008 16:24:44

mustofa
Moderator
From: Bandung
Registered: 24-07-2008
Posts: 1573

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.

Code:

char *strchr(const char *s, int ch)
{
  char *p;
  p = s;
  while (*p)
  { if (*p == ch)
      return p;
    p++;
  }
  return NULL;
}

Offline

 

#14 30-12-2008 16:25:52

mustofa
Moderator
From: Bandung
Registered: 24-07-2008
Posts: 1573

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.

Code:

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;
}

Offline

 

#15 09-11-2009 22:39:18

pucuk
2 dB
Registered: 01-11-2009
Posts: 11

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

Code:

#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...

Offline

 

#16 09-11-2009 23:26:39

sarwoko
2 dB
From: Surabaya
Registered: 04-09-2009
Posts: 38

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

Code:

#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 :

Code:

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

Offline

 

#17 10-11-2009 12:48:50

pucuk
2 dB
Registered: 01-11-2009
Posts: 11

Re: C Toolbox: String Processing

sarwoko wrote:

soalnya b gk di-increment, jd hrsnya :

Code:

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

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

Code:

Lvalue required in function main

btw ntu apa artinya ya...

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

Offline

 

#18 10-11-2009 13:07:23

mustofa
Moderator
From: Bandung
Registered: 24-07-2008
Posts: 1573

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

Code:

#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:

Code:

#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:

Code:

#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;
}

Offline

 

#19 10-11-2009 20:18:24

pucuk
2 dB
Registered: 01-11-2009
Posts: 11

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..?

Offline

 

#20 12-11-2009 23:25:59

pucuk
2 dB
Registered: 01-11-2009
Posts: 11

Re: C Toolbox: String Processing

nanya lagi nih kk mustofa...

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

Code:

#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...

Offline

 

#21 13-11-2009 03:38:21

sarwoko
2 dB
From: Surabaya
Registered: 04-09-2009
Posts: 38

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...

Code:

#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:

Code:

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);

Offline

 

#22 13-11-2009 04:45:04

sarwoko
2 dB
From: Surabaya
Registered: 04-09-2009
Posts: 38

Re: C Toolbox: String Processing

ikut nyumbang (bahasa C)

Code:

#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

Code:

#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);
}

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

Offline

 

#23 14-11-2009 00:23:41

mustofa
Moderator
From: Bandung
Registered: 24-07-2008
Posts: 1573

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...

Code:

#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.


Offline

 

#24 15-11-2009 09:13:18

pucuk
2 dB
Registered: 01-11-2009
Posts: 11

Re: C Toolbox: String Processing

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

Offline

 

#25 29-06-2010 20:40:00

ardiyan
No Signal
Registered: 29-06-2010
Posts: 2

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 =

Code:

data = "P123456789"

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

Code:

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 :

Code:

#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.

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

Offline

 
  • Index
  •  » C/C++
  •  » C Toolbox: String Processing

Board footer

Powered by PunBB
© Copyright 2002-2008 PunBB