백준 class1 11721번 열 개씩 끊어 출력하기
널 문자가 절대 출력되면 안된다는 조건이 있다.
참고) https://www.acmicpc.net/board/view/25166
글 읽기 - ★☆★☆★ [필독] 열 개씩 끊어 출력하기 FAQ ★☆★☆★
댓글을 작성하려면 로그인해야 합니다.
www.acmicpc.net
눈에 안 보였지만 널 문자를 출력해줘서 문제였던 것이다.
널 문자 관련 테스트
#include <iostream>
#include <cstring> //헤더 문제
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
char str[102];
fgets(str, 102, stdin);
int len = strlen(str);
str[len - 1] = '\0'; // 개행문자 있는 부분을 널 문자로 대체
//그러고 문자열의 길이를 다시 잰다.
int length = strlen(str);
cout << "문자열의 길이는" << length<<'\n';
int i;
for (i = 0; i < length; i++)
{
if (str[i] = '\0')
break; // 널 문자는 표시 안 하게끔
}
cout << "널 문자 만나기 직전 인덱스는" << i-1<<'\n';
int j;
for (j = 0; j < length; j++)
{
cout << str[i];
}
cout << "널 처리 안 하고 하면" << j;
return 0;
}
문자열 길이는 39
i-1=38
j=39
이렇게 나오는데?? ?? 그래도 널은 걸러줘야 한다. 아무래도 테스트 케이스가 따로 있을 테니까.
from 공지사항 : 널은 출력이 안 되게끔 해야한다!
#include <iostream>
#include <cstring> //헤더 문제
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
char str[102];
fgets(str, 102, stdin);
int len = strlen(str);
str[len - 1] = '\0'; // 개행문자 있는 부분을 널 문자로 대체
//그러고 문자열의 길이를 다시 잰다.
int length = strlen(str);
for (int i = 0; i < length; i++)
{
if (str[i] != '\0') {
cout<<str[i];
//문장 마지막은 일의 자리가 9인 경우
//인덱스 0부터 9까지 10 글자가 채워져서 그렇다.
//문장 하나 자르고 엔터키 넣어준다.
if (((i + 1) % 10 == 0) && (i != length - 1))
cout << '\n';
//길이가 10의 배수일 때, 마지막은 나오지 않게 하기.
}
}
return 0;
}
정답 코드에서 i가 얼만큼 나오는지 보자
[추가 주의 사항]
파일의 끝을 의미하는 EOF를 만나면, scanf는 -1을 반환합니다.
-1은 true이기 때문에 while문을 탈출하지 못합니다.
EOF를 쓸 때, TRUE/FALSE로 판단하지 말자.
참고하면 좋은 질문글 https://www.acmicpc.net/board/view/16208
백준 C++ 배우기 시리즈 1292번) 쉽게 푸는 문제 (0) | 2022.08.20 |
---|---|
백준 class1) 1157번 단어 공부 관련 C++ 지식 (0) | 2022.08.18 |
중간 연습 (0) | 2022.08.15 |
10951, 10952 (0) | 2022.08.12 |
백준 class1) 11720번 숫자의 합 (0) | 2022.08.11 |
댓글 영역