1. 문제

 

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

 

 

2. 결과

 

 

3. 코드

 

#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
using namespace std;

int main() {

	string s;
	int num, dnum;
	srand( (unsigned)time(0) );
	string aa[26]={ "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" }; 
	

	cout << "아래에 한 줄을 입력하세요.(exit를 입력하면 종료합니다)" << endl;
	while( 1 ) {
		cout << ">>";
		getline( cin, s);
		if( s == "exit" ) break;
		num = rand() % s.size();
		while( !isalpha( s.at(num) ) ) num = rand() % s.size();

		dnum = rand() % 26;
		s.replace( num, 1 , aa[dnum]  );
		cout << s << endl;
	}
}

 

4. 설명

 

string의 저장된 멤버 함수들을 이용하여서 문제를 해결합니다.

 

srand( (unsigned)time(0) );을 실행하여서 실행할 때 마다 랜덤한 값을 얻을 수 있도록 합니다.

 

코드를 쉽게 하기 위하여 a~z까지 저장하고 있는 string 배열 aa를 만들었습니다.

 

num = rand() % s.size();로 문자열 s에서 무작위 인덱스 값을 num에 저장합니다.

 

dnum = rand() % rand()로 0~25 중 랜덤한 수를 구합니다.

 

그 후 입력 받은 문자열 중에서 랜덤한 위치에 있는 것이 문자가 맞다면 s.replace( num, 1, aa[num] )으로 num번째 부터 1글자를 aa[num]과 바꿉니다.

 

+ Recent posts