hoonaa1005   3년 전

#include <iostream>
#include <string>
#include <cstring>

#pragma warning(disable : 4996)

using namespace std;

int main(void)
{
  freopen("input.txt", "r", stdin);

 char arr[1000001] = { };
 cin.getline(arr, 1000001, '\n');

 int count = 0;

 for (int i = 0;i < sizeof(arr); i++)
 {
   if (arr[i] != ' ')
   {
       while (arr[i] != ' ')
         i++;
    count++;
   }

  }

cout << count << '\n';

return 0;
}


여기서 input에 공백을 넣어도 count가 1이 출력이 되요ㅠㅠ왜그럴까요?

djm03178   3년 전

sizeof (arr)은 항상 1000001입니다. 문자열의 길이는 strlen으로 구해야 합니다.

jh05013   3년 전

문제 번호를 쓰는 칸이 있고, 소스코드를 넣는 칸도 있습니다.

hoonaa1005   3년 전

좋은 답변 감사합니다. 그런데 sizeof로 해도 공백을 input에 넣으면 if문의 조건에 만족하지 않아서 count값은 증가안하지 않나요?

djm03178   3년 전

공백은 arr[0]에 들어가고, arr[1]부터는 모두 널 문자가 들어있겠죠. 그러면 i = 1일 때 if문의 조건을 만족해서 arr의 끝까지 while문을 돌 뿐만 아니라, arr의 범위를 넘어서까지도 계속 돕니다. 사실 이 이후의 동작은 예측할 수 없죠. 다만 1로 출력되고 끝이 났다면 아직 런타임 에러가 나지 않을 수준에서 운 좋게 값이 공백 문자에 해당되는 메모리 값을 하나 발견해서 반복문을 탈출했다는 이야기고, 운이 나쁘면 끝내 런타임 에러가 나죠.

count++; 아래에 cout << i << '\n'; 을 한 번 넣어보시면 이해하시기 쉽습니다.

댓글을 작성하려면 로그인해야 합니다.