[데이터 구조] 비극 텍스트 (링크)

비극 텍스트
질문 설명:
너 는 파 손 된 키 보드 를 가지 고 있다.키보드 의 모든 키 는 정상적으로 작 동 할 수 있 지만, 때로는 홈 키 나 엔 드 키 가
누르다키보드 에 이런 문제 가 있다 는 것 을 모 르 고 영어 단 어 를 열심히 입력 해 모니터 도 보지 않 았 다.그대
모니터 를 볼 때 당신 앞 에 펼 쳐 진 것 은 비 극적인 텍스트 입 니 다.너의 임 무 는 이 텍스트 에 몇 개의 단어 가 있 는 지 계산 하 는 것 이다.
여러 그룹 을 포함 하 는 데 이 터 를 입력 하 십시오.각 그룹의 데 이 터 는 한 줄 을 차지 하고 20000 개의 영문 자모, 빈 칸, 문자 '[' 또는 '
자 "]" (20000 글자 에 달 하 는 데 이 터 는 한 줄 에 표 시 됩 니 다. 줄 이 바 뀔 염려 는 없습니다.)그 중에서 문자 '[' 는 홈 키 (커서 를 한 줄 의 시작 으로 지정) 를 나타 내 고 ']' 는 End 키 (커서 를 한 줄 의 끝 으로 지정) 를 나타 낸다.파일 끝 표시 줄 (EOF) 을 입력 하 십시오.지다
텍스트 입력 은 50kB 를 초과 하지 않 습 니 다.
각 그룹의 데이터 에 대해 하나의 숫자 를 출력 합 니 다. 즉, 이 비극 적 텍스트 에는 모두 몇 개의 단어 가 있 습 니 다 (빈 칸 으로 구 분 된 연속 문자열 을 하나의 단어 로 합 니 다).
예 를 들 어 입력:
This is a [Beiju] text
얻 은 비극 적 텍스트 는:
BeijuThis is a text
그래서 모두 4 개의 단어 가 있다.
입력:
This[ ]is[ ]a [Beiju] text
얻 은 비극 적 텍스트 는:
Beiju Thisisa text
그래서 모두 3 개의 단어 가 있다.
이 프로그램 은 앞장 서 는 노드 의 단일 체인 시트 로 이 루어 집 니 다. 그 중의 count 함 수 를 작성 하여 단어의 개 수 를 통계 하 는 기능 을 실현 하 십시오.프로그램 이 시간 을 초과 할 수 있 도록 배열 을 사용 하지 마 십시오.
입력 설명:
여러 개의 텍스트 를 입력 할 수 있 습 니 다. 각 그룹 은 영문 자모 로 구 성 된 단어, 빈 칸, [,] 를 포함 합 니 다.
출력 설명:
단어 수 를 위 한 정 수 를 출력 합 니 다.
범례 입력:
This is a [Beiju] text This [] is [] a [Beiju] text 출력 범례:
4 3
#include
#include
#include 
#include
#include
using namespace std;
struct node
{
    char data;
    struct node *next;
};


struct node* create(char text[])
{
    int i;
    struct node *current;//        
    struct node *tail;//   
    struct node *head;//   
    head = (struct node*)malloc(sizeof(struct node));//   
    head->next = NULL;
    current = head;//           
    tail = head;//         
    for(i=0; i<strlen(text); i++)
    {
        if(text[i] == '[')
        {//           
            current = head;
        }
        else if (text[i] == ']')
        {//           
            current = tail;
        }
        else
        {//             
            struct node *p;
            p = (struct node*)malloc(sizeof(struct node));
            p->data = text[i];
            p->next = current->next;
            current->next = p;
            current = p;
            if(current->next == NULL) tail = current; //        ,     tail  
        }
    }
    return head;
}
int count(struct node *head)
{
//         ,         
    int flag=0;//
    struct node *p;
    p=head->next;
    
    int sum=0;
    while(p!=NULL){
        if(flag==0 && p->data!=' '){
            sum++;
            flag=1;
        }
        if(flag==1 && p->data==' '){
            flag=0;
        }
        p=p->next;
    }
    
    return sum;
//          ,  ,           
}
int main()
{
    //freopen("input2.txt","r",stdin);
    //freopen("output2.txt", "w", stdout);
    char text[100005];
    struct node *head,*p;
    int num;
    while(gets(text)!=NULL)
    {
        head=create(text);
        //for(p=head->next; p!=NULL; p=p->next)
        //    printf("%c",p->data);
        //printf("
");
num=count(head); printf("%d
"
,num); } //printf("%.2f
", (double)clock()/CLOCKS_PER_SEC);
return 0; }

좋은 웹페이지 즐겨찾기