반응형

4.3> string 클래스를 이용하여 사용자가 입력한 영문 한 줄을 입력받고 글자 하나만 랜덤하게 수정하여 출력하는 프로그램을 작성하라.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <cstdlib> //random 사용 위함
#include <ctime> //srand 사용 위함
#include <string> //string 객체 사용 위함
 
using namespace std;
 
int main(void){
    string s; //string 객체 s
    srand((unsigned)time(0)); //시드값 설정
    
    cout<<"아래에 한 줄을 입력하세요.(exit를 입력하면 종료합니다)"<<'\n';
    while(true){ //무한루프
    cout<<">>";
    getline(cin,s,'\n'); //delimeter '\n'으로 한 줄 받아 s에 저장
    if(s=="exit"//s가 exit면 루프 탈출
        break;
    int rand_index=(rand())%(s.length()); //rand_index에 임의 인덱스 저장(s.length로 나눈 나머지는 무조건 0~length-1이 나옴)
    //조심해야 할것은 알파벳만 인덱스에 포함되는 것이 아니라 공백문자, 마침표와 같은 문자도 포함된다.
    int Daeso=rand()%2//글자를 바꾸는데 소문자로 바꿀 것인지 대문자로 바꿀 것인지 랜덤으로 정한다.
    if(Daeso==0//대문자로 정해짐
    s[rand_index]=(char)((rand()%26)+65); //아스키코드 65~90 대문자 알파벳
    else if(Daeso==1//소문자로 정해짐
    s[rand_index]=(char)((rand()%26)+97); //아스키코드 97~122 소문자 알파벳
    cout<<s<<endl//s출력
    }
    return 0;
}
 
cs



반응형
반응형

랜덤 수를 발생시키는 Random 클래스를 만들자. Random 클래스를 이용하여 랜덤한 정수를 10개 출력하는 사례는 다음과 같다. Random 클래스가 생성자, next(), nextInRange() 3개의 멤버 함수를 가지도록 작성하고 main() 함수와 합쳐 하나의 cpp파일에 구현하라.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
class Random {
public:
    Random() {
        srand((unsigned)time(0)); //다른 랜덤수를 발생시키기 위한 seed 설정
    }
    int next() {
        return rand();
    }
    int nextInRange(int a,int b) {
        return ((rand() % (b - a + 1)) + a); //a이상 b미만 랜덤 정수를 뽑는 알고리즘
        
    }
};
 
int main(void) {
    Random r;
    int i;
    cout << "-- 0에서 " << RAND_MAX << "까지의 랜덤 정수 10개--" << endl//RAND_MAX=32767 상수
    for (i = 0; i < 10; i++) {
        cout << r.next() << " ";
    }
    cout << "\n\n";
    cout << "-- 2에서 " <<  "4까지의 랜덤 정수 10개--" << endl;
    for (i = 0; i < 10; i++) {
        cout << r.nextInRange(2,4<< " ";
    }
    cout << endl;
    return 0;
}
cs



5미만의 수를 rand 출력하려면 4의 나머지를 출력하면 된다. (0~3)

여기서 3~6을 출력하고싶으면 위의 값에 3을 더해주면 된다. 그런데 우리가 가진 인자는 3,6이기 때문에

4를 3,6으로 표현해야 한다. 0~4 = 4개 3~6= 4개 숫자이다. 즉 우리가 원하는건 3~6에 존재하는 숫자 개수이기 때문에

6-3+1을 해주면 된다. 

3미만의 수를 rand 출력하려면 3의 나머지를 출력하면 된다. (0~2)

여기서 2~4를 출력하고 싶으면 4-2+1을 통해 나눠주는 수를 구하고 결과 값에 2를 더해주면 된다.

즉 일반적으로 표현했을 때 a~b 사이 랜덤 정수를 출력하고 싶으면

rand%(b-a+1)+a 를 해주면 되는 것이다.




반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C++' 카테고리의 다른 글

EvenRandom 클래스  (0) 2017.10.12
Oval (사각형에 내접하는 타원) 클래스  (0) 2017.09.21
별 출력  (0) 2017.09.09
1부터 10까지 더하기  (0) 2017.09.09
개인정보 출력  (0) 2017.09.09

+ Recent posts