문자형 배열에서 gets로 문자 입력하는데 만약에
aaaaaddccccaaddd
를 입력하면 출력을 a 는 5개 d는 3개 c는 4개 이런식으로 겹치는 것들중에 최대 갯수만 출력인데 포인터 안쓰고 문자열 함수 안쓰고 오직
배열이랑 반복문 조건문만 사용해서 ... 아 진짜 잠도 안옴 빡쳐서
#include<stdio.h>
int main()
{
char d[100];
int i;
int max[27]={0};
printf("Enter character string:\n"); /*문자열을 입력하세요 */
gets(d);
for(i=0;i!='\0';i++)
{
if(d[i+1]==d[i])
{
max[d[i]-'a']++;
printf("%c = %d\n",'a'+i,max[26]);
}
}
for(i=0;i<26;i++)
{
if(max[i]>0)
printf("%c = %d\n",'a'+i,max[26]);
}
}
for문으로 배열 숫자 돌리면서 if로 글자 맞으면 count 늘리는 식으로 만들면 기분 딱조타 식으로 나올듯 한데요
어차피 gets면 enter키 전까지만 받아오니까 if(배열[i] == NULL){break;} 해서 for문 중간에 끊어주는것도 적절할듯
gets만 하고 for문 씹어 버림 저대로 하니까
배열 0이랑 1이랑 같으면 카운트 업 하다가 다른거 만나면 갯수출력 다시 다른거 만났을때부터 앞에했던거 다시
더 좋은 방법이 있겠지만, 그냥 직관적으로 풀어도 될거 같다. \"aaaaaddccccaaddd\" 를 리스트의 리스트로 (\'a\', 5 , 2), (\'b\',2), (\'c\', 4), (\'d\',3) 처럼 표현을 바꾼다. 이때 리스트의 첫째 엘리먼트는 문자이고, 두번째이후 엘리먼트는 문자의 빈도수이며 역순으로 정렬된다. 출력시 각 리스트의 첫번재 엘리머트인 문자와 두번재 엘리먼트인 빈도수를 출력한다. C만으로는 구현하기 좀 짜증나긴하는데, 풀기 어려운 문제는 아니야.
씹어버리는 이유는 i!=\'\' 로 해서 그렇죠..... 그냥 100 돌리고 중간에 NULL만나면 break처리하는게 나을듯 싶네요
i!=\'\' 는 게시판으로 카피엔페이스트 하느라 없어진듯요 \'\\0\'으로 넣었는데 아마 특수 문자라...레노형말 뭔지 잘 모르겠는데 일단 다세고 걔중 큰것만 출력하라는 거임?! ^V^형 첫번째 for문 에서 갯수 세는거 하는중 근데 저걸 씹음
내가 지금 어플인대 이 어플이 파싱하면서 게시물이 짤린다 ㅠㅠ 소스가 반토막이리 다 안보여
근데 gets 자체가 \\0 전까지만 입력 받아 오기때문에 그걸 쓰시려면 scanf를 쓰셔야 하실껄요