Tam Sürümünü Görmek İçin : cpp de rastgele 7 basamakli sayi stringi uretme
herkese merhabalar,
C++ dili kullanarak 7 basamakli tamsayi iceren string uretmek istiyorum.
mesela:
string a,b,c,d,e;
a="1000000";
b="1000001";
c="1000002";
d="1234567";
e="1345256";
string uret(){
.
.
.
.
}
bu fonksiyonu nasil yazabilirim?
pardon bu arada belirtmeyi unutmusum uretilen sayilar mutlaka birbirinden farkli olmali
Benzeri bir yöntemler dosya adı ürettiğim bir fonksiyonum var.
Üzerinde çalışırsanız işinizi görebilir.
Gerçi emsalsiz dosya adı üreten hazır fonksiyonlar da var ama bu benim işime daha uygundu...
//---------------------------------------------------------------------------
String RandomDosyaAdi(int iUzunluk = 8, String sPath = "oooo", String sExt = "oooo")
{ //iUzunluk uzunluğunda ve sExt soyadında random dosya adı üret...
//örnek: iUzunluk = 5.. ve sExt = ".bmp" .. dosya adı : a01rt.bmp
//sExt noktası ile fonksiyona gönderilecek.. örnek: sExt = ".bmp"
time_t t;
srand((unsigned) time(&t));
if(sPath == "oooo") sPath = ExtractFilePath(Application->ExeName);
String sRakam = sRakam.StringOfChar('9', iUzunluk);
unsigned int iSayi = 0;
String sDosyaAdi = "";
do {
iSayi = rand() % sRakam.ToInt();
sDosyaAdi = IntToHex(static_cast <int> (iSayi), iUzunluk).LowerCase();
}
while(FileExists(sPath + sDosyaAdi));
if(sExt != "oooo") sDosyaAdi += sExt;
return sDosyaAdi;
}
//---------------------------------------------------------------------------
Euclides
10/10/2005, 16:52
asoza'unun yöntemini uyguladığımızı düşünelim.
(10**7 - 2) tane sayıyı hali hazırda üretmiş olalım, son sayıyı bulmamız stdlib'deki "rand()" fonskiyonun rasgeleliğe yaklaşma oranı ve şansımıza göre saniyeler veya yıllar sürebilir. :S
@Lewissi:
Size Google'da "Generating all combinations"'ı aratmanızı öneririm.
Üzerinde çalışırsanız işinizi görebilir.
Gerçi emsalsiz dosya adı üreten hazır fonksiyonlar da var ama bu benim işime daha uygundu...
asoza'unun yöntemini uyguladığımızı düşünelim.
Benimki foruma katıkı olsun. Sizinki de son cümleniz itibarıyla ona benziyor biraz.
:p
yapmak istedigim asagidaki gibi birsey.ama sorun cikartiyor.nasil char* olan bir degiskeni string yaparim?
// bu kod verilen tamsayiyi karakter arrayine donusturur daha sonra bu karakter arrayini string sinifina // donusturur.
#include<iostream>
#include<string>
using namespace std;
using std::string;
int main()
{
char array[7];
static int x=1000000;
char a,b,c,d,e,f,g;
x++;
a=(char)((x%10)+48);
x/=10;
b=(char)((x%10)+48);
x/=10;
c=(char)((x%10)+48);
x/=10;
d=(char)((x%10)+48);
x/=10;
e=(char)((x%10)+48);
x/=10;
f=(char)((x%10)+48);
x/=10;
g=(char)((x%10)+48);
array[0]=g;
array[1]=f;
array[2]=e;
array[3]=d;
array[4]=c;
array[5]=b;
array[6]=a;
char* cp;
for(int j=0;j<7;j++)
cp[j]=array[j];
string s=(string) cp;
cout<<s<<endl;
acehreli
13/10/2005, 23:15
std::string'in char* alan bir kurucusu var. string, kendisine verilen char*'i degistirmeyecegini gostermek icin kurucusunda 'char const *' alir. Ayrica, o char*'in bir C-dizgisi oldugunu varsayar; yani sonunda bir dizgi sonlandirma karakteri ('\0') olduguna guvenir.
Yapilacak sey cok kolay: string'i kurarken o dizgiyi vermektir:
string s0("dizgi0"); // <-- derleme zamaninda bilinen bir dizgiyle
char * dizgi1 = /* bir sekilde elde edilsin */;
string s1 = dizgi1; // <-- bir dizgi ile
Kodunda gordugum bir kac aksaklik:
1) array zaten bir C dizgisi olarak kullanilabilecegi icin, ayrica cp gibi bir araciya gerek yok
2) cp nereyi gosteriyor? cp[j] yaptigin zaman hangi karaktere erisiyorsun?
3) cp olsa da olmasa da, string'e verdigin dizginin sonunda '\0' karakteri yok. Programini array'i 8 uzunlukta tanimlayarak ve array[6]=a; satirindan sonrasini su kodda goruldugu gibi degistirerek duzeltebilirsin:
char array[8];
/* ... */
array[6]=a;
array[7] = '\0';
string s = array;
cout << s << '\n';
4) main icinde tekrarlanan mantigi bir for dongusu icine alman gerekiyor. O zaman hersey guzel olacak! :) Oyle yapinca a,b,vs. nesnelerine de gerek kalmayacak.
5) using namespace std; dedikten sonra ayrica using std::string; demeye gerek yok.
Ali
acehreli
13/10/2005, 23:18
Tabii aslinda s'ye de gerek yok; array'i dogrudan da yazdirabilirsin:
cout << array << '\n';
Ali
C++ dilinde rastgele 7 basamaklı sayi ureten bi fonksiyon nasil yazarim?
belirtmeyi unutmusum arka arkaya cagrildiginda da farkli 7 basamakli sayilar uretecek
acehreli
22/10/2005, 21:24
Lewissi, senden once Lewissi adli birisi daha ayni seyi sormustu. ;) Verilen cevaplar yukarida...
Ali
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.