vehbiakdogan

Senior Sofware Developer

c++

C++ Pointer İle Dizi İçinde Gezinme

Merhaba arkadaşlar sizlere c++ ile pointer ile dizi içinde  gezme nasıl yapılır bakacağız.
Öncelikle bazı şeyleri bilmemiz gerekiyor bunlar:
oluşturduğumuz bir iki boyutlu dizi örneğin:

int dizi[4][4] = {{1,3,5,7},{2,4,6,8},{3,6,9,12},{4,8,12,16}};

dizisi bellekte sıralı olarak yani 1,3,5,7,2,4,6,8,3,6,9,12,4,8,12,16 şeklinde tutuluyor yani biz ilk elemanımızın adresini bilirsek diğerlerine de onun sayesinde ulaşabiliriz.
C++ da bir değişkenin adresi & operatörü ile alınır.
Buna göre biz bir pointer değişken oluşturur ve dizinin ilk elemanının adresini ona atarsak dizide kolayca gezebiliriz.

Örneğin:

#include <iostream>
using namespace std;
int main()
{
  int dizi[4][4] = {{1,3,5,7},{2,4,6,8},{3,6,9,12},{4,8,12,16}}; // Dizimiz
  int *diziPtr = &dizi[0][0]; // Bir Pointer Değişken Oluşturduk ve dizinin ilk elemanının adresini verdik
  for(int i = 0;i<16;i++) {
    cout << *diziPtr<<"-"; // Dizi İçinde rahatça gezinebiliyoruz artık 
    diziPtr++;
  }
}

örneği Online Compiler da Da çalıştırıp görebilirsiniz.

C++

C++ Bir Kelimeden Verilen belirli bir kısmı silmek

Bir arkadaşımın isteği üzerine c++ ta kullanıcıdan kelime, başlangıç indisi ve silinecek karakter sayısı alınarak bir kelimenin harflerini silen konsol uygulamasını hazırladım.
Not: henüz pointer görülmediği içim pointer kullanmadan çözüm yaptım.

Tam Soru şöyle ki : Bir karakter dizininin, bir parçasını silen bir fonksiyon yazınız. Fonksiyona parametre
olarak karakter dizini, karakter dizinin silinecek kısmın başlangıç indisi ve silinecek
karakter sayısı gönderilecektir (strlen,substr gibi string fonksiyonları kullanmayınız).

Kodlarımız:

#include <iostream>
using namespace std;
void karakterSil(char [], int, int); // strlen olamdan çözüm
void karakterSilStrlen(char[], int, int); // strlen ile çözüm 
int main() {
	setlocale(LC_ALL,"TURKISH"); // türkçe karakter sorunu için 
	char kelime[100]; 
	int baslangic,
		karakterSayisi;
	// değişkenleri tanımladık
	cout << "Lütfen Bir Kelime, silinecek karakter indisi ve silinecek karakter adedini sırayla Giriniz: ";
	cin >> kelime>>baslangic>>karakterSayisi;
	// verileri aldık
	karakterSil(kelime,baslangic,karakterSayisi);
	//karakterSilStrlen(kelime, baslangic, karakterSayisi);
	cout << kelime;

	return 0;
}

// strlen olmadan çözüm 
void karakterSil(char kelime [], int baslangic, int karakterSayisi) {
	int indis = 0;
	while (kelime[indis] != '\0') {
		if (indis >= baslangic && indis < (baslangic + karakterSayisi)) {
			kelime[indis] = ' ';
		}
		indis++;
	}

}


// strlen ile çözüm 


void karakterSilStrlen(char kelime[], int baslangic, int karakterSayisi) {
	for (int indis = 0; indis < strlen(kelime); indis++){
		if (indis >= baslangic && indis < (baslangic + karakterSayisi)) {
			kelime[indis] = ' ';
		}
	}

}

strlen kullanmayın dediği için ben hem strlen kullanarak hemde strlen olmadan çözüm yaptım ikisini de kullanabilirsiniz 🙂
Çalışmayı Buradan İndirebilirsiniz.

C++