무 작위 문자열

자료 1 출처:http://zhidao.baidu.com/link?url=dcVL1oNt7OH6X25SBHUefIKNtfHuEkuWr95HMPVLsQtSPjqKfEhyv82HE6sNzz8EOnsJppjNaSPXYLR8jqFOq_ 무 작위 문자열 을 직접 만 드 는 라 이브 러 리 함 수 는 없 지만 이렇게 실현 할 수 있 습 니 다. 1. 고정 길이 의 무 작위 문자열 은 주로 고정 개수 의 무 작위 문 자 를 만 드 는 것 입 니 다. 그러면 간단 합 니 다. 두 조 의 무 작위 로 0 ~ 25 의 정수 num 을 만 든 다음 에 'a' + num 으로 소문 자 를 할당 합 니 다.'A' + num 으로 대문자 한 그룹 을 할당 합 니 다. 무 작위 로 0, 1 을 생 성하 고 0 을 생 성 합 니 다. 'a' 로 num 과 추가 하여 소문 자 를 생 성 합 니 다.1 을 만 들 고 'A' 로 num 과 더 해 대문자 생 성;
2. 고정 되 지 않 은 길이 의 무 작위 문자열 을 만 드 는 것 은 위 에 고정 되 어 있 는 길이 의 무 작위 문자열 을 만 드 는 토대 에서 무 작위 숫자 를 도입 하여 문자열 의 길 이 를 조절 하 는 것 입 니 다.
코드 는 다음 과 같 습 니 다:
//             
#include<conio.h> 
#include<stdio.h>
#include<stdlib.h> 
#include<time.h> 

#define N 10//     10

void main() 
{ 
 int flag,charLengt;
 int i,j,k=0;
 char ch[N+1]={NULL};
 srand((unsigned)time(NULL)); 

 for(i=0;i<10;i++)//  10 String
 {
  for(j=0;j<N;j++)
  {
   flag=rand()%2; 
   if(flag) ch[k++]='A'+rand()%26;
   else ch[k++]='a'+rand()%26;
  }
  ch[k]='\0';
  k=0;
  printf("%s
"
,ch); } }

자료 2 출처:http://blog.csdn.net/wangchangshuai0010/article/details/17188417
    //     length       
    char* genRandomString(int length)  
    {  
        int flag, i;  
        char* string;  
        srand((unsigned) time(NULL ));  
        if ((string = (char*) myMalloc(length)) == NULL )  
        {  
            myLog("Malloc failed!flag:14
"
); return NULL ; } for (i = 0; i < length - 1; i++) { flag = rand() % 3; switch (flag) { case 0: string[i] = 'A' + rand() % 26; break; case 1: string[i] = 'a' + rand() % 26; break; case 2: string[i] = '0' + rand() % 10; break; default: string[i] = 'x'; break; } } string[length - 1] = '\0'; return string; }

strand (time (null) 에 대한 자료 출처:http://zhidao.baidu.com/link?url=83y2wU6uazUagHHieLfT2k568Qp_A4obFq4Uu18TbrCLT3HDslTWZJIkyvra4Bz-lU32Vl24LvteIo11lk8pJa
C 언어 에서 무 작위 수 를 가 져 오 는 함 수 는 rand () 입 니 다.
합 격 된 무 작위 수 치 는 가 져 온 값 으로 충분히 해시 되 어야 하 며, 값 이 예측 할 수 없 는 특성 이 있어 야 합 니 다. 그러나 어떠한 처리 도 하지 않 고 rand () 를 직접 호출 하면 얻 은 값 은 고정 되 어 있 습 니 다.다음은 하나의 예 이다.
#include <stdio.h>
#include <stdlib.h>
int main()
{
    for(i = 0; i < 10; i ++)
        printf("%d
"
, rand());// 10 。 return 0; }

이 프로그램 을 실행 하 는 것 은 문제 가 없어 보 입 니 다. 얻 은 10 개의 숫자 가 모두 산열 되 어 있 기 때문에 무 작위 수의 느낌 이 듭 니 다.그러나 이 프로그램 을 반복 적 으로 실행 하면 매번 실행 할 때마다 얻 는 10 개의 수가 똑 같 고 이것 은 예측 할 수 없 는 특성 에 부합 되 지 않 는 다 는 것 을 알 수 있다.
그래서 C 언어의 난수 함수 rand () 는 위조 난수 라 고 불 린 다.
srand 함 수 를 통 해 이 가짜 랜 덤 수 를 '진짜' 로 만 들 수 있 습 니 다. 그 원 리 는 랜 덤 피 드 를 설정 한 다음 에 후속 적 인 랜 덤 수 는 피 드 값 에 의존 하 는 것 입 니 다.
#include <stdio.h>
#include <stdlib.h> 
int main() {
    for(i = 0; i < 100000; i += 10000)
    {
        srand(i);
        printf("%d
"
, rand());// 10 。 } return 0; }

이 프로그램 을 반복 적 으로 실행 하면 같은 랜 덤 피 드 가 가 져 온 랜 덤 수치 가 똑 같 음 을 알 수 있 습 니 다.이렇게 하면 이 무 작위 종자 수 치 는 고정 값 이 될 수 없 기 때문에 이 종자 수 치 를 변화 시 킬 방법 을 강구 해 야 한다.
이 값 을 변화 시 키 는 방법 은 여러 가지 가 있 습 니 다. 가장 많이 사용 되 는 것 은 시간 함수 time () 을 통 해 입 니 다.이 함 수 는 현재 시간 값 을 가 져 옵 니 다. 단 위 는 밀리초 입 니 다.일반적인 호출 방식 은 time(NULL);이 값 으로 랜 덤 피 드 를 만 들 면 매번 호출 되 는 피 드 값 이 다 를 수 있 습 니 다. 똑 같은 효 과 를 얻 으 려 면 밀리초 단위 의 같은 시간 에 동시에 실행 해 야 하기 때문에 이 확률 은 너무 낮 습 니 다.
그래서 time (NULL) 은 가장 자주 사용 하 는 랜 덤 피 드 가 되 었 다.
이상 은 srand(time(NULL)); 난수 발 생전 에 랜 덤 으로 씨앗 을 세 는 이유 입 니 다.

좋은 웹페이지 즐겨찾기