Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

C++ sorusu

Başlatan mr.engineer, 11 Temmuz 2020, 20:56:40

mr.engineer

Merhaba,
Aşağıdaki kodda kafama takılan bir yer var. C++ da yeniyim bilmediğim bir şey mi var acaba?
Tüm koda bakmaya gerek yok bence ama belki gözümden kaçırdığım bir şey vardır diye hepsini paylaştım.
while döngüsünde, string size'ı daima 32 ve 'x' değişkeni -1 olduğunda döngüden çıkıyor yani -1<32 kontrolünden sonra while döngüsü bitiyor.
Bana göre sonsuz döngü olması lazım. Buradaki sorun nedir?

x = s1.find(' ');

Bu satırda ilk boşluk bulunup indexi döndürüyor. Hiç boşluk olmazsa -1 döndürüyor. Bu yüzden sonsuz döngü olması gerekmiyor mu?


//sstrchng.cpp
//changing parts of string objects
#include <iostream>
#include <string>
using namespace std;
int main()
{
	int y;
	string s1("Quick! Send for Count Graystone.");
	string s2("Lord");
	string s3("Don't ");
	s1.erase(0, 7); //remove "Quick! "
	s1.replace(9, 5, s2); //replace "Count" with "Lord"
	s1.replace(0, 1, "s"); //replace 'S' with 's'
	s1.insert(0, s3); //insert "Don't " at beginning
	s1.erase(s1.size() - 1, 1); //remove '.'
	s1.append(3, '!'); //append "!!!"
	

	cout << s1 << endl;

	
	
	int x = s1.find(' '); //find a space
	while (x < s1.size()) //loop while spaces remain
	{
		s1.replace(x, 1, "/"); //replace with slash
		x = s1.find(' '); //find next space
	}
	cout << "s1: " << s1 << endl;
	return 0;
	
}

Gediz1337

#1
find fonksiyonu, aradığınız argümanı bulamadığı zaman string::npos sabitini döndürür. Bu sabitin tipi de size_t'dir. size_t de unsigneddır. npos, yani işaretsiz türdeki değişken, işaretli bir değer olan -1 olarak tanımlandığı için maksimum unsigned değeri (çok büyük ihtimalle: 18446744073709551615, 0xffffffffffffffff) döndürür. Bu koşulda da bu büyük değer, s1.size()'ın döndürdüğü değerden küçük olmadığı için döngü bir sonraki iterasyona devam edemez.


mr.engineer

Alıntı yapılan: Gediz1337 - 11 Temmuz 2020, 22:45:26find fonksiyonu, aradığınız argümanı bulamadığı zaman string::npos sabitini döndürür. Bu sabitin tipi de size_t'dir. size_t de unsigneddır. npos, yani işaretsiz türdeki değişken, işaretli bir değer olan -1 olarak tanımlandığı için maksimum unsigned değeri (çok büyük ihtimalle: 18446744073709551615, 0xffffffffffffffff) döndürür. Bu koşulda da bu büyük değer, s1.size()'ın döndürdüğü değerden küçük olmadığı için döngü bir sonraki iterasyona devam edemez.


İlginç bir şey. Neden bu değişken unsigned olarak tanımlı ki o zaman?
Kitapta da -1 döndürür demiş, bu detayı vermesi gerekirmiş.
Teşekkürler