int i; for (i = 0; s[i]; i += 1 + (s[i] < 0)); return i;
ㅇㄴ(58.239)2015-04-24 02:40
돌려 보고 오시길 권해드립니다. 입력은 "abcd가나다라efgh" 넣어보세요. 반복용 변수랑 count용 변수를 합쳐 놓으셔서 원하는 대로 안 돌아갈 겁니다.
ㅅㅅㅅ(125.128)2015-04-24 02:42
쓰자 마자 깨달았음 ㅠ
ㅇㄴ(58.239)2015-04-24 02:43
int j = 0; for (int i = 0; s[i]; i += 1 + (s[i] < 0)) j++; return j;
ㅇㄴ(58.239)2015-04-24 02:44
음 맞아요. 중요한 인코딩 가정을 문제에서 빼먹었는데 인코딩은 당연히 euc-kr(cp949) ;)
ㅅㅅㅅ(125.128)2015-04-24 02:45
그렇죠
ㅇㄴ(58.239)2015-04-24 02:46
char은 플랫폼에 따라 unsigned char인 경우도 있고 signed char인 경우도 있는데 ㅇㄴ가 쓴 코드는 플랫폼 종속적이지 않음?
정현준어머니(59.23)2015-04-24 02:55
ㄴ unsigned char인 플랫폼의 예를 한번 들어봐. 어떤 게 있는데? 내가 알기론 표준 상으로도 자료형은 signed/unsigned를 생략하면 무조건 signed가 되는 걸로 알고 있다.
ㅅㅅㅅ(125.128)2015-04-24 02:58
찾아봤는데 표준에서 char가 signed인지 unsigned인지를 정의하지 않은듯
ㅇㄴ(58.239)2015-04-24 02:59
0x80이랑 and해서 right shift 7 하면 될려나. char가 1 byte이긴 한가..? 어차피 인코딩도 시스템에 따라서 다르니까 이쯤에서 컷
ㅇㄴ(58.239)2015-04-24 03:01
그렇네. 내가 잘못 알고 있었나벼. char가 1바이트인지도 사실 표준 상으로는 규정된 게 없는데(표준 상으로는 sizeof(char) == 1인 것만 규정되어 있음) 9비트, 10비트, 심지어는 2바이트도 가능하지만 char라는 게 원래 ASCII 문자(7bit)를 나타내기 위해 고안된 거라 1바이트인 건 de facto standard라고 봐야됨. ㅇㄴ의 코드에서 s[i] < 0을 (signed char)s[i] < 0 으로 고치면 완벽한 코드가 된다.
int i; for (i = 0; s[i]; i += 1 + (s[i] < 0)); return i;
돌려 보고 오시길 권해드립니다. 입력은 "abcd가나다라efgh" 넣어보세요. 반복용 변수랑 count용 변수를 합쳐 놓으셔서 원하는 대로 안 돌아갈 겁니다.
쓰자 마자 깨달았음 ㅠ
int j = 0; for (int i = 0; s[i]; i += 1 + (s[i] < 0)) j++; return j;
음 맞아요. 중요한 인코딩 가정을 문제에서 빼먹었는데 인코딩은 당연히 euc-kr(cp949) ;)
그렇죠
char은 플랫폼에 따라 unsigned char인 경우도 있고 signed char인 경우도 있는데 ㅇㄴ가 쓴 코드는 플랫폼 종속적이지 않음?
ㄴ unsigned char인 플랫폼의 예를 한번 들어봐. 어떤 게 있는데? 내가 알기론 표준 상으로도 자료형은 signed/unsigned를 생략하면 무조건 signed가 되는 걸로 알고 있다.
찾아봤는데 표준에서 char가 signed인지 unsigned인지를 정의하지 않은듯
0x80이랑 and해서 right shift 7 하면 될려나. char가 1 byte이긴 한가..? 어차피 인코딩도 시스템에 따라서 다르니까 이쯤에서 컷
그렇네. 내가 잘못 알고 있었나벼. char가 1바이트인지도 사실 표준 상으로는 규정된 게 없는데(표준 상으로는 sizeof(char) == 1인 것만 규정되어 있음) 9비트, 10비트, 심지어는 2바이트도 가능하지만 char라는 게 원래 ASCII 문자(7bit)를 나타내기 위해 고안된 거라 1바이트인 건 de facto standard라고 봐야됨. ㅇㄴ의 코드에서 s[i] < 0을 (signed char)s[i] < 0 으로 고치면 완벽한 코드가 된다.
http://codepad.org/JefcnmHL
헉헉 모바일로 풀기 으렵네..
뒷북인듯
걍 wchar_t 씁시다..
ASCII 면 char 지. 128개 문자만 정의 되어 있으니. 그러니까 signed 표준이라고 봐도 무방하다.
오래된 개발자들이라면 익히 다 아는 문제 ; )