2012-08-06 2 views
1

실용적입니다. 문자열이나 메시지를 입력하고 모스 부호로 변환해야합니다 : 'A'= .- 'B'= -... ecs.문자열에 공백을 표시합니다.

일련의 if 문을 사용하여 문제없이 문제를 해결할 수 있습니다.

for(int i = 0;i < stringvalue.length();i++) 
{ 
    if(stringvalue == 'A') 
     cout << ".-"; 
     //there is 26 if statements 

} 

하지만 문자열을 입력하면.

"Testing data" 

문자열의 첫 번째 부분 만 모스로 변환됩니다 (테스트 변환 됨).

왜 공백 뒤에 부품을 변환하지 않습니까? 문자열에 공백이 있으면 "/"을 출력해야합니다.

+0

'CIN >>를 사용하여'공간에서 휴식 것입니다. 대신'getline'을 사용하십시오 : http://en.cppreference.com/w/cpp/string/basic_string/getline – BoBTFish

+0

또한'if's를 26 개 사용하는 대신에, 아마도 모스의 테이블 (배열)을 사용할 수 있습니다 코드 값을 입력하고 테이블의 각 문자를 찾습니다. – BoBTFish

답변

3

은 입력 루틴은 다음과 같습니다 경우

std::string input; 
std::cin >> input; 

입력이 첫번째 공백 문자까지 읽습니다. 전체 줄을 읽으려면 std::getline을 사용할 수 있습니다. 당신이 cin >> stringvalue를 사용 stdin에서 문자열을 읽고 때문에

std::getline(std::cin, input); 
+0

도와 주셔서 감사합니다. 나는 10 분 안에 대답을 받아 들일 것이다. –

+0

@JonathanGeers : 대단히 환영합니다. – jxh

2

. C++ operator>>(istream, string)은 공백 다음에 멈 춥니 다. 한 번에 하나의 공백으로 구분 된 토큰 만 읽습니다.

는 대신, getline를 사용

std::getline(std::cin, stringvalue); 
관련 문제