سلام خسته نباشید
چطوری یک رشته تصادفی (حروف+ اعداد) با طول ۱۰ کاراکتر بسازیم که تکراری نباشه
فقط نمیخوام رشته رو چاپ کنه ، میخوام بریزه داخل متغیر
میخوام به زبان C باشه.
خیلی هم سایت عالی دارید . دمتون گرم
سلام خسته نباشید
چطوری یک رشته تصادفی (حروف+ اعداد) با طول ۱۰ کاراکتر بسازیم که تکراری نباشه
فقط نمیخوام رشته رو چاپ کنه ، میخوام بریزه داخل متغیر
میخوام به زبان C باشه.
خیلی هم سایت عالی دارید . دمتون گرم
آخرین ویرایش به وسیله pixcel : چهارشنبه 17 اردیبهشت 1399 در 00:44 صبح
برای تولید اعداد تصادفی از srand و rand استفاده میشه که برای توضیحاتشون به این تاپیک ها مراجعه کنید :
فرق srand با rand در چیست؟
طرز استفاده از تابع rand
چون آخر رشته با کاراکتر NULL مشخص میشه، برای رشته 10 کاراکتری به آرایه 11 کاراکتری نیاز داریم.
اول با srand یک seed تصادفی انتخاب می کنیم که با timer بدست میاد.
بعد داخل حلقه 10 بار از بین 26 حرف انگلیسی یا 10 رقم یکی رو به رشته اضافه می کنیم.
و نهایتا آخر رشته رو با 0 (NULL) مشخص می کنیم.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
char s[11];
int i;
srand(time(0));
for (i = 0; i < 10;i++)
s[i] = (rand() % 2 == 0) ? (rand() % 26 + 65) : (rand() % 10 + 48);
s[10] = 0;
printf(s);
return 0;
}
من میخوام هم حروف تصادفی باشه هم اعداد ، یه همچین رشته ای میخوام تولید کنم:2am46f7g1v
برای مثال : این قطعه کد اعداد و حروف تصادفی تولید میکنه ولی برا اندرویده
int random_string_length =14;
String[] all_characters ={
"a","b","c","d","e","f","g","h","i","j","k","l","m",
"n","o","p","q","r","s","t","u","v","w","x","y","z",
"0","1","2","3","4","5","6","7","8","9",
" "
};
int all_characters_length = all_characters.length;
int min =0;
int max = all_characters_length-1;
String random_string ="";
for(int x =1; x < random_string_length+1; x = x+1){
Random r =newRandom();
int random_number = r.nextInt(max - min +1)+ min;
String random_character = all_characters[random_number];
random_string = random_string + random_character;
}
تقریبا به همین شکل ولی در C نوشته بشه ، ولی بجای اینکه عبارت رو چاپ کنه ، بریزه توی یک متغیر
کدی که نوشتم به قول شما می ریزه تو متغیر s، در کد 65 کد حرف A است (حرف بزرگ) و رقم و حروف بزرگ ایجاد می کنه، 65 رو با 97 جایگزین کنید، میشه رقم و حروف کوچک :
char s[11];
int i;
srand(time(0));
for (i = 0; i < 10;i++)
s[i] = (rand() % 2 == 0) ? (rand() % 26 + 97) : (rand() % 10 + 48);
s[10] = 0;
صورت سوال تغییری نکرده که کد جدید بخواد، همونه که در پست اول مطرح کردید. تعجب می کنم که درخواستی می کنید اما کدی که نوشته میشه رو بررسی نمی کنید.
اینکه میگید نمیخوام کاراکتر داشته باشه مثل اینه که بگید میخوام ترکیبی از سیب و پرتقال باشه، نمی خوام میوه داشته باشه، فقط سیب و پرتقال.
حروف و عدد کاراکتر هستند دیگه، بدون کاراکتر رشته ای در کار نیست.
شما یکبار زحمت بکشید و کدی که تحویل گرفته اید رو اجرا کنید و ببینید خروجی اش چیه و با چیزی که خواستید ئه یا نه.
مطمئن هستید؟ یک جای کار ایراد داره. نباید خارج از محدوده کاراکتری دریافت کنید. یک نسخه کد و فایل اجرایی اش رو پیوست کردم.
RandomC.zip
preview.png
بجای 97 و 48 کاراکتر 'a' و '0' رو امتحان کنید، قاعدتا معادل هم هستند :
char s[11];
int i;
srand(time(0));
for (i = 0; i < 10;i++)
s[i] = (rand() % 2 == 0) ? (rand() % 26 + 'a') : (rand() % 10 + '0');
s[10] = 0;
و البته می توانید غیر مستقیم از یک رشته دیگر کاراکتر ها رو انتخاب کنید :
char chs[] = "0123456789abcdefghijklmnopqrstuvwxyz";
char s[11];
int i;
srand(time(0));
for (i = 0; i < 10;i++)
s[i] = chs[rand() % 36];
s[10] = 0;