Skip to content

Instantly share code, notes, and snippets.

@Mervetafrali
Last active March 30, 2017 13:51
Show Gist options
  • Save Mervetafrali/5810d0104173fd2fcdd09f3daa967a18 to your computer and use it in GitHub Desktop.
Save Mervetafrali/5810d0104173fd2fcdd09f3daa967a18 to your computer and use it in GitHub Desktop.

Programlama 2 → 5. Hafta

Tanımlama ve Kullanım

int main() {
	char ad[20];
	printf("adinizi girin: ");

	scanf("%s", ad);

	printf("\nmerhaba %s\n\n", ad);

	return 0;
}
// Tanimlarken deger atama
int main() {

char s1[20] = "deneme2";

printf("%s\n", s1);

	return 0;
}
// sabit yapma
int main() {

	const char *s2 = "deneme3";

printf("%s\n", s2);

	return 0;
}
// dizinin boyutunu atanan degere gore otomatik belirleme
int main() {

	char s3[] = "deneme4";

printf("%s\n", s3);

	return 0;
}

Sonlandırma Karakteri

int main() {
	char kelime[20];

	printf("bir kelime girin: ");
	scanf("%s", kelime);

	int i;

	// tamamini karakter karakter yazdirirsak, girilmemis kisim rastgele olur
	for (i = 0 ; i < 20 ; i++)
		printf("%c", kelime[i]);

	printf("\n\n");

	return 0;
}

Karakter sayarak tersten yazdırmak

int main() {
	char kelime[20];
	int karakter_sayisi;
	int i;
	printf("bir kelime girin: ");
	// NOT: birden fazla kelime girilirse ilkini okur. bosluk, tab ve enter
     //kelime sonunu belirler
	scanf("%s", kelime);
	printf("girilen kelime: %s\n", kelime);

	return 0;
}
// karakter sayisini sayma islemi
	karakter_sayisi = 0;
	while (kelime[karakter_sayisi] != '\0')
		karakter_sayisi++;
	printf("karakter sayisi: %d\n", karakter_sayisi);
	// karakter sayisini sayma islemi
	for (karakter_sayisi = 0 ; kelime[karakter_sayisi] != '\0' ; karakter_sayisi++) {
		/* bos dongu. sadece harf sayisini arttiriyor */
	}
	printf("karakter sayisi: %d\n", karakter_sayisi);
// tersten yazdirma
	printf("tersten yazilisi: ");
	for (i = karakter_sayisi-1 ; i >= 0; i--)
		printf("%c", kelime[i]);
	printf("\n");

gets ve puts fonksiyonları

int main() {
	char s[100];
	// gets fonksiyonu ile cumle okunabilir (bosluklar dahil).
	// scanf %s ile kelime okunabiliyor. scanf %s bosluklari almiyor.

	printf("cumle girin: ");
	gets(s);

	printf("cumle: ");
	puts(s);

	return 0;
}
int main() {
	int a = 10;
	char yazi[8];
	int b = 20;

	printf("a: %d ve b: %d\n\n", a, b);

	printf("programi 8 veya daha fazla karakter girerek test edin\n");
	printf("yazi girin: ");
	gets(yazi);

	// scanf'de de ayni problem var
	// scanf("%s", yazi);

	printf("girilen kelime: ");
	puts(yazi);

	printf("\na: %d ve b: %d\n", a, b);

	return 0;
}

gets fonksiyonu !!!

  • ISO C11 (2011) standartında gets fonksiyonu kaldırıldı. Derste kullanılan derleyici C99 (1999) standartını kullanmaktadır.

  • Gets fonksiyonu güvenlik açığı (buffer overflow) oluşturmaktadır.
    Büyük bir string girerek programın akışını bozulabilmektedir.
    string yerine makine kodu girilirse, programın içindeki verilere hatta bilgisayarın dosya sistemine erişime bile sebep olabilir.

  • Buffer overflow problemi scanf %s ile de ortaya çıkabilir. Dolayısıyla eleman sayısına göre okuma yapılmalıdır.

  • Örneğin string 50 elemanlı ise scanf(“%49s”, str); şeklinde kullanılmalıdır.

gets fonksiyonu alternatifi

int main() {
	int a = 10;
	char s[8]; // 7 karakter + 1 sonlandirma karakteri sigabilir
	int b = 20;                                                               Uyarı: fgets fonksiyonu kelimenin sonunda enter ( \n ) karakteri bırakır. Bundan dolayı fgetsden hemen sonra sondaki \n
                                                                             karakterinin yerine \0’a atanmalıdır.

                                                                            Örnek:
	                                                                          fgets(s, 8, stdin);
	                                                                          s[strlen(-1)]='\0'; // sondaki \n yerine \0 ata

	printf("a: %d ve b: %d\n\n", a, b);
	printf("programi 8 veya daha fazla karakter girerek test edin\n");
	printf("kelime girin: ");
	fgets(s, 8, stdin); // gets yerine bu sekilde kullanabiliriz
	// scanf ile kelime okumak istersek
	// scanf("%7s", s);
	printf("girilen kelime: ");
	puts(s);
	printf("\na: %d ve b: %d\n", a, b);
	return 0;
}
int main() {
	int a = 10;
	char s[8]; // 7 karakter + 1 sonlandirma karakteri sigabilir
	int b = 20;
	printf("a: %d ve b: %d\n\n", a, b);
	printf("programi 8 veya daha fazla karakter girerek test edin\n");
	printf("kelime girin: ");
	fgets(s, 8, stdin); // gets yerine bu sekilde kullanabiliriz
	// scanf ile kelime okumak istersek
	// scanf("%7s", s);
	printf("girilen kelime: ");
	puts(s);
	printf("\na: %d ve b: %d\n", a, b);
	return 0;
}
int main() {
	int a = 10;
	char s[8]; // 7 karakter + 1 sonlandirma karakteri sigabilir
	int b = 20;
	printf("a: %d ve b: %d\n\n", a, b);
	printf("programi 8 veya daha fazla karakter girerek test edin\n");
	printf("kelime girin: ");
	fgets(s, 8, stdin); // gets yerine bu sekilde kullanabiliriz
	// scanf ile kelime okumak istersek
	// scanf("%7s", s);
	printf("girilen kelime: ");
	puts(s);
	printf("\na: %d ve b: %d\n", a, b);
	return 0;
}

string içerisinde karakter arama

*Uyarı: Bu işlemi yapan hazır fonksiyon C kütüphanesinde vardır.

int main() {
	char cumle[100];
	printf("bir cumle girin: ");
	fgets(cumle, 100, stdin); // gets yerine bu sekilde kullanabiliriz
	// gets(cumle);
	printf("cumlenin uzunlugu: %d\n", karakter_sayisi(cumle));
	int yer = karakter_ara(cumle, 'a');
	if (yer == -1)
		printf("cumlede a karakteri yok\n");
	else
		printf("cumlede a karakteri %d. indexte var\n", yer);
	return 0;
}
int karakter_sayisi(const char *s) {
	int i;
	for (i = 0 ; s[i] != '\0' ; i++) {
		/* islem yapmadan say */
	}
	return i;
}
int karakter_ara(const char *s, char c) {
	int i;
	for (i = 0 ; s[i] != '\0' ; i++) {
		if (s[i] == c)
			return i;
	}
	return -1;
}

String birleştirme

int main() {

	char cumle_1[100];
	char cumle_2[50];

printf("bir cumle girin: ");
	fgets(cumle_1, 50, stdin);

printf("eklenecek cumle girin: ");
	fgets(cumle_2, 50, stdin);
	// cumle_1'in sonuna cumle_2'yi ekle

string_ekle(cumle_1, cumle_2);
	printf("ikinci cumle, birinci cumleye eklendi.\n\n");
	puts(cumle_1);
	return 0;
}
int karakter_sayisi(const char *s) {
	int i;
	for (i = 0 ; s[i] != '\0' ; i++) {
		/* islem yapmadan say */
	}
	return i;
}
// bastaki isimli stringe, sondaki isimli stringi ekler
void string_ekle(char *bastaki, const char *sondaki) {
	int bastaki_N = karakter_sayisi(bastaki);
	int sondaki_N = karakter_sayisi(sondaki);

	int i;
	for (i = 0 ; i < sondaki_N ; i++)
		bastaki[i+bastaki_N] = sondaki[i];
	bastaki[bastaki_N+sondaki_N] = '\0';
}
2
char cumle_1[3] = {'B', 'İ', 'R'}
char cumle_2[3] = {'İ', 'K', 'İ'}
int bastaki_N = karakter_sayisi(bastaki);
int sondaki_N = karakter_sayisi(sondaki);
int bastaki_N = 3
int sondaki_N = 3
for (i = 0 ; i < sondaki_N ; i++)
		bastaki[i+bastaki_N] = sondaki[i];
for (i = 0 ; i < 3 ; i++)
		bastaki[i+3] = sondaki[i];
3
bastaki[bastaki_N+sondaki_N] = '\0';

bastaki[3+3] = '\0';
int karakter_sayisi(const char *s) {
	int i;
	for (i = 0 ; s[i] != '\0' ; i++) {
		/* islem yapmadan say */
	}
	return i;
}
// bastaki isimli stringe, sondaki isimli stringi ekler
void string_ekle(char *bastaki, const char *sondaki) {
	int bastaki_N = karakter_sayisi(bastaki);
	int sondaki_N = karakter_sayisi(sondaki);

	int i;
	for (i = 0 ; i < sondaki_N ; i++)
		bastaki[i+bastaki_N] = sondaki[i];
	bastaki[bastaki_N+sondaki_N] = '\0';
}

string içerisinde string aramak

int main() {
	char cumle[100];
	char aranan[20];
	printf("bir cumle girin: ");
	fgets(cumle, 100, stdin); // gets yerine bu sekilde kullanabiliriz
	// gets(cumle);
	printf("aranan kelime: ");
	scanf("%20s", aranan);
	printf("cumlenin uzunlugu: %d\n", karakter_sayisi(cumle));
printf("aranan kelimenin uzunlugu: %d\n", karakter_sayisi(aranan));
	int var = string_ara(cumle, aranan);
	if (var == 0) {
		printf("aranan kelime cumlede yok\n");
	} else {
		printf("aranan kelime cumlede var\n");
	}
	return 0;
}
int karakter_sayisi(const char *s) {
	int i;
	for (i = 0 ; s[i] != '\0' ; i++) {
		/* islem yapmadan say */
	}
	return i;
}
int string_ara(const char *s, const char * aranan) {
	int i, j;
	int s_n = karakter_sayisi(s);
	int aranan_N = karakter_sayisi(aranan);

	for (i = 0 ; i <= s_n-aranan_N ; i++) {
		// i'den basla, aranan_N tanesi ayni mi bak
		for (j = 0 ; j < aranan_N ; j++) {
			if (s[i+j] != aranan[j])
				break; // farkliysa digerlerine bakmaya gerek yok
		}
		// eger j == aranan_N olduysa: j dongusu bitmis ve aranan_N tanesi aynidir
		if (j == aranan_N)
			return 1; // return var
	}
	return 0;
}

string birleştirme

4
char cumle[5] = {'B', 'A', 'K', 'I', 'R'}
char aranan[2] = {'I', 'R'}
int s_n = karakter_sayisi(s);
int aranan_N = karakter_sayisi(aranan);
int string_ara(const char *s, const char * aranan) {
	int i, j;
	int s_n = karakter_sayisi(s);
	int aranan_N = karakter_sayisi(aranan);

	for (i = 0 ; i <= s_n-aranan_N ; i++) {
		// i'den basla, aranan_N tanesi ayni mi bak
		for (j = 0 ; j < aranan_N ; j++) {
			if (s[i+j] != aranan[j])
				break; // farkliysa digerlerine bakmaya gerek yok
		}
		// eger j == aranan_N olduysa: j dongusu bitmis ve aranan_N tanesi aynidir
		if (j == aranan_N)
			return 1; // return var
	}
	return 0;
}
4
char cumle[5] = {'B', 'A', 'K', 'I', 'R'}
char aranan[2] = {'I', 'R'}
int s_n = 5
int aranan_N = 2
for (i = 0 ; i <= s_n-aranan_N ; i++)
for (i = 0 ; i <= (5-2) ; i++)
int string_ara(const char *s, const char * aranan) {
	int i, j;
	int s_n = karakter_sayisi(s);
	int aranan_N = karakter_sayisi(aranan);

	for (i = 0 ; i <= s_n-aranan_N ; i++) {
		// i'den basla, aranan_N tanesi ayni mi bak
		for (j = 0 ; j < aranan_N ; j++) {
			if (s[i+j] != aranan[j])
				break; // farkliysa digerlerine bakmaya gerek yok
		}
		// eger j == aranan_N olduysa: j dongusu bitmis ve aranan_N tanesi aynidir
		if (j == aranan_N)
			return 1; // return var
	}
	return 0;
}
char cumle[5] = {'B', 'A', 'K', 'I', 'R'}
char aranan[2] = {'I', 'R'}
for (i = 0 ; i <= 3 ; i++) {
		for (j = 0 ; j < 2 ; j++) {
			if (s[i+j] != aranan[j])
				break;
		}
}
int string_ara(const char *s, const char * aranan) {
	int i, j;
	int s_n = karakter_sayisi(s);
	int aranan_N = karakter_sayisi(aranan);

	for (i = 0 ; i <= s_n-aranan_N ; i++) {

		for (j = 0 ; j < aranan_N ; j++) {
			if (s[i+j] != aranan[j])
				break;
		}
		// eger j == aranan_N olduysa: j dongusu bitmis ve aranan_N tanesi aynidir
		if (j == aranan_N)
			return 1; // return var
	}
	return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment