You are not logged in.
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
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".
Offline
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".
Offline
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;
}Offline
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;
}Offline
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;
}Offline
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;
}Offline
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;
}Offline
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);
}Offline
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);
}Offline
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;
}Offline
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;
}Offline
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;
}Offline
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;
}Offline
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...
Offline
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 cCode:
#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++;
}Offline
sarwoko wrote:
soalnya b gk di-increment, jd hrsnya :
Code:
while (*b) { *p = *b; p++; b++; }
udah ak coba...
malah jadi error kk...
Lvalue required in function main
btw ntu apa artinya ya...
Last edited by pucuk (10-11-2009 12:51:00)
Offline
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 cCode:
#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;
}Offline
sip kk...gw ngerti skrg..jalan udh program nya...hehe..
kk emang tokcer...
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
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...
Offline
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:
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
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);
}Last edited by sarwoko (13-11-2009 05:10:00)
Offline
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
Thx atas pencerahan nya...
kk sarkowo n kk mustofa....
Offline
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.
Last edited by ardiyan (29-06-2010 20:45:46)
Offline