#include <iostream>
#include <cctype>
using namespace std;
void iss();
void main()
{
char str[100];
cout << \"마침표로 끝난, 읽어들인 문장에서 모든 공백 문자들을 \'-\' 문자로 대체합니다.\\n\";
cout << \"문장 입력: \";
cin >> str;
cout << endl;
cout << \"대체된 문장은 다음과 같습니다.\" << endl;
iss();
cout << endl;
}
void iss()
{
char next;
do
{
cin.get(next);
if(isspace(next))
cout << \'-\';
else
cout << next;
} while(next != \'.\');
}
실행 시,
a bcde fg.
라고 입력하면 그 결과값이
-bcde-fg. 라고 나오는데
원인 아시는 분 있나요?
코드가 전반적으로 이상한데. 왜 cin >> str 로 입력바은걸 안쓰고 iss에서 입력을 또 받냐?
str로 입력받은 건 나중에 main 자체에서 활용할 경우를 위해 놔둔거고, iss는 cin.get으로 입력스트림에서만 쓴거라서요
cin >> str; 이거 빼니까 제대로 되네요.
원인이 뭔지....
일단 int main() 부터
글고 전반적으로 조언을 좀 하자면, 코드의 역할을 좀 구분할 필요가 있을 것 같아. 입력받은 문자열의 공백을 치환하는 기능과, 그 문자열을 출력하는 기능이 짬뽕되어있잖아? 이걸 먼저 분리를 시켜봐
return 0; 굳이 쓰기 싫어서 void 쓴건데요
글고 C++ 쓸거면 문자열은 std::string을 쓰는게 좋다
void main() 비표준이야. 표준에 따르면 main()에 한해서 return 구문이 없어도 return 0; 처럼 동작해야함
isspace() 함수만 테스트할 거라서 main 은 걍 void 한거에요 이게 문제가 아니라 왜 제가 의도한 대로 출력이 안되는 건지가 문제인데
문자열을 출력하는 기능이 짬뽕되어 있다는건 뭔 말이죠?
그러니까, 프로그램에서 구현하고자 하는게 문자열을 입력받아서 공백을 -로 치환하고 싶은거지? 그럼 그 과정을 세분화하면, 1. 문자열을 입력받음. 2. 공백을 -로 치환. 3. 치환된 문자열을 출력 이렇게 나눠보라는거지. 지금 코드는 iss()에서 입력도 받고 치환도 하고 출력도 하잖아
글고 원하는 대로 동작하지 않는건 cin >> str; 문장에서 한 문장을 다 받아서 str에 저장하는게 아니라 한 단어만 받아서 저장하는 거라 생기는 문제일 거다
cin >> str;은 공백으로 띄워진 문장, 예로 들면 abcd efgh 를 입력하면 abcd만 입력이 되네요
cin.getline(str, 100); 으로 문장을 받아보니 공백이 있어도 그 문장이 다 받아지고요. 그리고 치환될 것, cin.get(next); 에서는 받을 수 있는 문장, 단어가 하나도 없고요.