lhw941   7년 전

문자열에 대한 문제를 풀던중

int len = strlen(str);
for (int i = 0; i < len; i++)
{
if (str[i]<'a'||str[i]>'z')continue;
sol[str[i] - 'a']++;
}

이 코드와


for(auto s:str)

{

if (s<'a'||s>'z')continue;
sol[s- 'a']++;

}

이 코드 두가지를 사용해봤는데요. 보시다싶이 문자열중 a~z의 갯수를 각각 세는 프로그램입니다. 

이 두가지 문법을 사용해 코드를 짰었는데 전자로풀었을때는 맞고 후자로 풀었을때는 틀리게나옵니다. 이 두가지 문법상에 어떤 차이가 있나요? 

gallopsys   7년 전

초기화를 했느냐, 안 했느냐에 따라 달라질 거 같긴 한데, strlen으로 문자열의 길이를 측정하는 방법은 말 그대로 입력된 문자열의 길이만큼 반복하게 됩니다.


C++11의 Range-based for에서 문자열 배열을 사용하게 되면 배열의 크기만큼 반복문을 반복하게 됩니다. 예를 들어 char str[100];이라면 100번 반복하게 되는 것이죠.

lhw941   7년 전

음 아무래도 문자열의 길이 바깥에 있는 값들이 제대로 초기화되지 않았었나 보네요.. 감사합니다 ㅎ.ㅎ

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