728x90
작성시 발생했던 오류
1. 배열을 초기화를 시키지 않아서 쓰레기값이 출력할때 발생했습니다.
- 쓸모없는 문자들이 왜 발생하는지, 처음에는 sizeof(str)로 조건식을 처리하고있기 때문에 값이 들어가있지 않은 배열 (ex_299번째 배열)에 쓰레기값이 당연히 들어있어서 저렇게 나오는것으로 생각하고 값이 들어있는 배열칸 이외에는 제외하고 계산을 해보려고 했으나. 현재까지 배운 함수로는 해결방법을 찾을 수 없었습니다.
- 그 다음 삭제하는 방법을 소스코드 뒤쪽에서 처리하려고 NULL값도 줘보고, 원하는 값을 제외한 값이 들어올 경우 NULL로도 처리해보려고 했지만 해결이 되지 않았습니다.
- 배열을 초기화시켜보니 해결이 깔끔하게 완료되었습니다.
2. 앞에서 선언을 안해주거나, 여러 예제들을 공부중이라 main에서 다른 함수를 호출했을 경우 오류 발생
3. %s를 통해 printf를 해줄 경우 문자열 마지막에는 Null값이 들어가 있어서 처리되지 않은 Null값을 만나게되면 강제로 종료되게 됩니다.
- 따라서 루프를 돌릴때 Null값 자리를 빼주는것이 중요합니다. (이번에는 -1을 처리해주었음)
//문자열을 입력받아서 대문자 - 소문자 - 대문자 - 소문자 순으로 수정해서 출력하는 프로그램 (easy)
//위의 프로그램을 수정해서 거꾸로 뒤집어서 출력하는 프로그램 작성 (normal)
// 오류 : 초기화를 안시켰을때 쓰레기값 발생, 앞에서 선언안해줬을때, main에서 호출 안해준 경우
// sizeof()를 하게되면 배열 전체크기가 반환된다.
// 오류 : %s를 통해 printf해줄경우 마지막에 Null값이 들어있어서 -1처리 해줘야 한다.
#include <iostream>
using namespae std;
int main()
{
mission();
}
void mission()
{
char str[300] = {0};
char str2[300] ={0};
bool t= true;
cin >> str;
for(int i = 0; i < sizeof(str); i++) //str사이즈에 맞춰서 반복
{
int b;
b = str[i];
if(t == true)//특수문자에 따른 스위치
{
if((i%2)==0)
{
if(b >= 65 && b <= 90)
{
str[i] = b;
}
else if(b >= 97 && b <= 122)
{
b = b-32;
str[i] = b;
}
}
else if((i%2)==1)
{
if(b >= 65 && b <= 90)
{
b = b+32;
str[i] = b;
}
else if(b >= 97 && b <= 122)
{
str[i] = b;
}
}
}
else if(t == false) //특수문자에 따른 스위치
{
if((i%2)==0)
{
if(b >= 65 && b <= 90)
{
b = b+32;
str[i] = b;
}
else if(b >= 97 && b <= 122)
{
str[i] = b;
}
}
else if((i%2)==1)
{
if(b >= 65 && b <= 90)
{
str[i] = b;
}
else if(b >= 97 && b <= 122)
{
b = b-32;
str[i] = b;
}
}
}else
{
str[i]= NULL;
}
// 특수문자가 입력될경우 true -> false, false -> true
if(((b >= 65 && b <= 90)||(b >= 97 && b <= 122))==0)
{
t = !t;
}
// 특수문자가 입력될 경우
}
cout << str << endl;
// 거꾸로 출력해주는 부분
int d = sizeof(str)-1;
int f = 0;
while(d>=0)
{
if(str[d]!=NULL)
{
str2[f] = str[d];
printf("%c",str2[f]);
f++;
}
d--;
}
// 거꾸로 출력해주는 부분
}
예제 2
대문자 > 소문자
소문자 > 대문자
대문자 소문자 변환
void mission()
{
char str[300];
cin >> str;
for(int i = 0; i < sizeof(str); i++)
{
int b;
b = str[i];
if(b >= 65 && b <= 90)
{
b = b+32;
str[i] = b;
}
else if(b >= 97 && b <= 122)
{
b = b-32;
str[i] = b;
}
}
cout << str;
}
728x90
'프로그래밍 > C,C++' 카테고리의 다른 글
[C,C++] 기본 3가지 정렬(선택정렬, 버블정렬, 삽입정렬) (0) | 2023.06.11 |
---|---|
[C/C++] 문자열 할당 및 출력하기 예제 (0) | 2023.06.07 |
[C/C++] Swap 예제를 통해 포인터 맛보기 (0) | 2023.06.07 |
[C/C++] 로또 번호 셔플 예제 (0) | 2023.06.07 |
C++ 컴파일 과정 (0) | 2023.06.06 |