PDA

View Full Version : سوال: تولید رشته تصادفی در C



pixcel
چهارشنبه 17 اردیبهشت 1399, 01:31 صبح
سلام خسته نباشید
چطوری یک رشته تصادفی (حروف+ اعداد) با طول ۱۰ کاراکتر بسازیم که تکراری نباشه
فقط نمیخوام رشته رو چاپ کنه ، میخوام بریزه داخل متغیر
میخوام به زبان C باشه.
خیلی هم سایت عالی دارید . دمتون گرم

the king
چهارشنبه 17 اردیبهشت 1399, 02:03 صبح
سلام خسته نباشید
چطوری یک رشته تصادفی (حروف+ اعداد) با طول ۱۰ کاراکتر بسازیم
فقط نمیخوام رشته رو چاپ کنه ، میخوام بریزه داخل متغیر
میخوام به زبان C باشه.
خیلی هم سایت عالی دارید . دمتون گرم


برای تولید اعداد تصادفی از srand و rand استفاده میشه که برای توضیحاتشون به این تاپیک ها مراجعه کنید :
فرق srand با rand در چیست؟
(https://barnamenevis.org/showthread.php?441184-%D9%81%D8%B1%D9%82-srand-%D8%A8%D8%A7-rand-%D8%AF%D8%B1-%DA%86%DB%8C%D8%B3%D8%AA%D8%9F)طرز استفاده از تابع rand
(https://barnamenevis.org/showthread.php?524401-%D8%B7%D8%B1%D8%B2-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%D8%A7%D8%A8%D8%B9-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;
}

pixcel
چهارشنبه 17 اردیبهشت 1399, 05:38 صبح
برای تولید اعداد تصادفی از srand و rand استفاده میشه که برای توضیحاتشون به این تاپیک ها مراجعه کنید :
فرق srand با rand در چیست؟
(https://barnamenevis.org/showthread.php?441184-%D9%81%D8%B1%D9%82-srand-%D8%A8%D8%A7-rand-%D8%AF%D8%B1-%DA%86%DB%8C%D8%B3%D8%AA%D8%9F)طرز استفاده از تابع rand
(https://barnamenevis.org/showthread.php?524401-%D8%B7%D8%B1%D8%B2-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%D8%A7%D8%A8%D8%B9-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 = new Random();
int random_number = r.nextInt(max - min + 1) + min;
String random_character = all_characters[random_number];
random_string = random_string + random_character;
}

تقریبا به همین شکل ولی در C نوشته بشه ، ولی بجای اینکه عبارت رو چاپ کنه ، بریزه توی یک متغیر

the king
چهارشنبه 17 اردیبهشت 1399, 07:00 صبح
من میخوام هم حروف تصادفی باشه هم اعداد ، یه همچین رشته ای میخوام تولید کنم: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;

pixcel
چهارشنبه 17 اردیبهشت 1399, 10:31 صبح
کدی که نوشتم به قول شما می ریزه تو متغیر 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;


آقا خیلی ممنون ، خیلی کمک کرد
جسارتا یه سوال دیگه دارم

وقتی رشته رو به صورت تصادفی تولید میکنه ، میخوام ترکیبی از حروف و عدد باشه ، نمیخوام کاراکتر داشته باشه. فقط حروف و عدد

یعنی فقط میخوام از این کاراکتر ها رشته تصادفی بسازه :"0123456789abcdefghigklmnopqrstuvwxyz"
چه کنم ؟

the king
چهارشنبه 17 اردیبهشت 1399, 12:00 عصر
آقا خیلی ممنون ، خیلی کمک کرد
جسارتا یه سوال دیگه دارم

وقتی رشته رو به صورت تصادفی تولید میکنه ، میخوام ترکیبی از حروف و عدد باشه ، نمیخوام کاراکتر داشته باشه. فقط حروف و عدد

یعنی فقط میخوام از این کاراکتر ها رشته تصادفی بسازه :"0123456789abcdefghigklmnopqrstuvwxyz"
چه کنم ؟
صورت سوال تغییری نکرده که کد جدید بخواد، همونه که در پست اول مطرح کردید. تعجب می کنم که درخواستی می کنید اما کدی که نوشته میشه رو بررسی نمی کنید.
اینکه میگید نمیخوام کاراکتر داشته باشه مثل اینه که بگید میخوام ترکیبی از سیب و پرتقال باشه، نمی خوام میوه داشته باشه، فقط سیب و پرتقال.
حروف و عدد کاراکتر هستند دیگه، بدون کاراکتر رشته ای در کار نیست.
شما یکبار زحمت بکشید و کدی که تحویل گرفته اید رو اجرا کنید و ببینید خروجی اش چیه و با چیزی که خواستید ئه یا نه.

pixcel
چهارشنبه 17 اردیبهشت 1399, 12:15 عصر
صورت سوال تغییری نکرده که کد جدید بخواد، همونه که در پست اول مطرح کردید. تعجب می کنم که درخواستی می کنید اما کدی که نوشته میشه رو بررسی نمی کنید.
اینکه میگید نمیخوام کاراکتر داشته باشه مثل اینه که بگید میخوام ترکیبی از سیب و پرتقال باشه، نمی خوام میوه داشته باشه، فقط سیب و پرتقال.
حروف و عدد کاراکتر هستند دیگه، بدون کاراکتر رشته ای در کار نیست.
شما یکبار زحمت بکشید و کدی که تحویل گرفته اید رو اجرا کنید و ببینید خروجی اش چیه و با چیزی که خواستید ئه یا نه.

خروجی که به من میده اینه :7e5\Tar[`x

ولی نمیخوام علامت سوال و سینک تکس و ... داشته باشه
میخوام حروف انگلیسی و عدد باشه فقط

the king
چهارشنبه 17 اردیبهشت 1399, 12:58 عصر
خروجی که به من میده اینه :7e5\Tar[`x

ولی نمیخوام علامت سوال و سینک تکس و ... داشته باشه
میخوام حروف انگلیسی و عدد باشه فقط
مطمئن هستید؟ یک جای کار ایراد داره. نباید خارج از محدوده کاراکتری دریافت کنید. یک نسخه کد و فایل اجرایی اش رو پیوست کردم.
151669
151670

بجای 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;

pixcel
چهارشنبه 17 اردیبهشت 1399, 21:37 عصر
مطمئن هستید؟ یک جای کار ایراد داره. نباید خارج از محدوده کاراکتری دریافت کنید. یک نسخه کد و فایل اجرایی اش رو پیوست کردم.
151669
151670

بجای 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;



آقا دستت درد نکنه درست شد