2022. 10. 27. 08:35ㆍ언어(Language)/c++
[Exercise 4-1 switch문 사용하기]
입력된 문자들 중 'a'/'A','b'/'B'나 다른 문자들의 개수를 count하는 프로그램을 작성하시오.
+)사용자로부터 문자들을 입력받아, a/A, b/B 문자 개수를 헤아리는 프로그램이다. 반복문과 함께 분기문(switch 문장)을 적절히 사용하자. 사용자가 입력하는 문자를 하나씩 읽어 들이는 코드는 다음과 같다.
int ch;
while((ch=cin.get()) != '\n')
{
...
}
실행 예)
내 코드)
#include <iostream>
using namespace std;
int main() {
int ch, aCount = 0, bCount = 0, otherCount = 0;
while ((ch = cin.get()) != '\n') { //사용자가 입력하는 문자를 하나씩 읽어 들이는 코드
switch (ch) {
case 'a': {
aCount += 1; break;
}
case 'A': {
aCount += 1; break;
}
case 'b': {
bCount += 1; break;
}
case 'B': {
bCount += 1; break;
}
default: {
otherCount += 1; break;
}
}
}
cout << endl;
cout << "a or A's count : " << aCount << endl;
cout << "b or B's count : " << bCount << endl;
cout << "other char count : " << otherCount << endl;
}
[Exercise 4-2 정수를 문자열로 변환하기]
atoi()와 반대되는 itoa()를 만드시오
-char *itoa(int value)
-내부에 static char buff[100]을 두고, 이에 변환된 string을 저장하여 결과값으로 돌려줌
-사용)
char *itoa(int i) {
static char buff[100];
...
}
int main() {
char *ptr=itoa(100);
cout<<ptr; //"100"출력
return 0;
}
앞에서 문자열을 정수로 변환하는 atoi() 함수 구현 예를 살펴보았다. 여기에서는 그 반대 기능의 itoa() 함수를 구현해보자. 슬라이드에 보이는 바와 같이 itoa() 함수는 정수(예:123)를 입력받아 문자열("123")로 변환한다. 변환된 문자열은 itoa() 내부에 있는 char buff[100]에 저장되며, itoa() 함수는 buff 주소 값을 반환한다. itoa()가 반환된 후에도 buff에 저장된 문자열이 유효하게 만들기 위하여 buff는 static으로 선언된다.
힌트를 주자면 입력된 정수의 아랫자리부터 하나씩 문자로 변환하여 buff[]에 저장한 다음, 최종적으로 buff엥 저장된 문자열을 역순으로 바꾸면 된다. 예롤 123을 입력받으면 가장 아랫자리부터 3, 2, 1 순으로 차례대로 문자 '3', '2', '1'로 변환하여 buff에 저장한다. 변환이 끝나면 buff에는 "321"이 저장되어 있을 것이다. 이를 역순으로 바꾸면 "123"이 된다.
//숫자에서 문자로 만드는 함수 구현
//힌트 : 뒷자리부터 하기
//3->'3'으로 만드는 방법(숫자->문자열) : 3 + '0' -> '3'
//reverse하기
//태블릿으로 찍은 사진 참조
#include <iostream>
using namespace std;
char* itoa(int n) {
static char buff[100]; //이에 변환된 string을 저장하여 결과값으로 돌려줌
int i;
for (i = 0; n > 0; ++i, n = n / 10) {
buff[i] = n % 10 + '0';
buff[i--] = 0; //buff=="321"
for (int k = 0; k < i; ++k, --i) {
char temp = buff[k];
buff[k] = buff[i];
buff[i] = temp;
}
return buff;
}
}
int main() {
char* ptr = itoa(123);
cout << ptr; //"100"출력
return 0;
}
[Exercise 4-3 이중 순환문 작성하기]
다음과 같이 화면에 출력하는 프로그램을 작성하라.(use nested-for)
[실행 예]
제어 흐름에서 많이 사용되는 기법 중에 하나가 이중 순환문(nested for)이다. 이는 이차원적인 반복이 필요할 때 사용하는 것으로 본 연습문제에서 요구하는 기능을 구현하는데 적합하다. 즉, ABCDE처럼 1줄 출력은 일차원 순환문으로 구현할 수 있는 반면 이런 1줄 출력이 여러 줄에 걸쳐 이루어져야 되므로 이차원 순환문이 필요하다.
이중순환문을 사용하여 여러 줄에 걸쳐 "ABCDE"를 출력하는 코드는 다음과 같다. 이 코드를 일부 수정함으로써 연습문제에서 원하는 기능을 수행하는 코드를 작성할 수 있다.
for(int i=0;i<5;++i) {
for(int j=0;j<5;++j)
cout<<char('A'+j);
cout<<endl;
}
[내 답]
#include <iostream>
using namespace std;
int main() {
for (char j = 'E'; j >= 'A'; j--) {
for (char i = 'A'; i <= j; i++) {
cout << i;
}
cout << endl;
}
return 0;
}
'언어(Language) > c++' 카테고리의 다른 글
명품 C++ Programming 실습문제 ch01 (0) | 2022.11.29 |
---|---|
수업 교재 ch17 Console Input-Ouput (0) | 2022.11.29 |
[중간대비] ch05 Function & Preprocess (0) | 2022.10.27 |
[중간대비] ch03 Variable, Operator, Expression (0) | 2022.10.27 |
[중간대비] ch02 서론 (0) | 2022.10.26 |