C 언어 강화 (9) 문장의 단 어 를 뒤 집 는 순서

이것 은 흔히 볼 수 있 는 문제 입 니 다. 매우 간단 하지만 데이터 구 조 를 사 용 했 습 니까? 아니면 잘 썼 습 니까?
이 문 제 를 통 해 당신 은 파악 할 수 있 습 니 다.
  • 사용자 의 입력 을 콘 솔 로 출력 하 는 방법
  • 문자열 을 어떻게 분할 합 니까
  • 데이터 구 조 를 어떻게 정확하게 사용 합 니까
  • 제목: 영어 문장 을 입력 하고 문장의 단어의 순 서 를 뒤 집 지만 단어 내 문자 의 순 서 는 변 하지 않 습 니 다.문장 중의 단 어 는 빈 칸 으로 구분 된다.문장 부 호 는 일반 자모 와 같이 처리한다.
     예 를 들 어 'I am a student' 를 입력 하면 'student. a am I' 를 출력 합 니 다.
    사고의 방향
    문자열 가 져 오기
    우선 사용자 가 입력 한 문자열 을 가 져 올 수 있 습 니 다. 두 가지 주의 가 필요 합 니 다.
    1. cin < < 를 사용 하면 출력 할 때 빈 칸 뒤의 문자열 이 출력 되 지 않 는 것 을 발견 할 수 있 습 니 다. 다음 그림 입 니 다.
    해결 방법: cin. getline (str, length) 사용
    2. 사용자 가 입력 한 문자열 의 길 이 는 일반적으로 우리 가 만 든 문자 배열 의 길이 와 같 지 않 기 때문에 전통 적 인 i < str. size () 로 옮 겨 다 니 면 여러 개의 '뜨 거 운' 출력 을 발견 할 수 있 습 니 다. 배열 이 초기 화 되 지 않 았 기 때 문 입 니 다.
    아래 그림
    해결 방법: strlen (str) 을 사용 하여 문자 배열 의 유효 길 이 를 가 져 옵 니 다.
    다음은 사용자 입 출력 코드 입 니 다.
    <span style="font-size:14px;">	char str[100];
    	//    
    	cout<<"   ,    100"<<endl;
    	//    
    	cin.getline(str,100);
    	cout<<"          :";
    	//    
    	cout<<strlen(str)<<endl;
    	//    
    	for(int i=0;i<strlen(str);i++){
    		cout<<str[i];
    	}
    	cout<<endl;</span>

    뒤집다
    입 출력 을 실현 한 후 관건 적 인 반전 문자열 입 니 다.
    어떻게 뒤 집 습 니까?문자 배열 의 커서 변환??제발, 이것 은 처음에 우리 가 C 언어 를 배 울 때 사용 한 방법 이 아니 었 습 니까? 데이터 구 조 를 배 운 사람 에 게 첫 번 째 반응 은 이런 보배 인 스 택 입 니 다!
    먼저 들 어가 서 나 가 는 것 이 창고 의 특성 입 니 다!이것 은 앞에서 C 언어 강화 (2) 디자인 에서 최소 요소 의 스 택 을 구 할 수 있 습 니 다.
    먼저 입력 한 문자열 을 창고 에 넣 으 면 마지막 에 나 오 는 순서 가 뒤 집 히 지 않 습 니까?
    그래서 우리 가 해 야 할 일 은 문자열 을 키 문자열 로 나 누 어 창고 에 넣 고 꺼 내 서 해결 하 는 것 입 니 다!
    반전 함수 코드
    <span style="font-size:14px;">void reverseStr(char * str){
    	//  ,           
    	char * p; 
    	vector<char*> vt;
    	const char * split = " "; 
    	p = strtok (str,split); 
    	while(p!=NULL) { 
    		//cout<<p;
    		vt.push_back(p);//     
    		p = strtok(NULL,split); //       
    	} 
    	//        ,      
    	while(vt.size()>0){
    		cout<<vt[vt.size()-1]<<" ";
    		vt.pop_back();
    	}
    	cout<<endl;	
    }</span>

    전체 소스 코드
    <span style="font-size:14px;">#include <stdio.h>
    #include<stdlib.h>
    #include <iostream>
    #include<sstream>
    #include <vector>
    
    using namespace std;
    
    /**
    
              。
      :        ,          ,           。
               。     ,             。
        “I am a student.”,   “student. a am I”。
    
      
    1.         ,     
    2.  ,           
    */
    
    void reverseStr(char * str){
    	//  ,           
    	char * p; 
    	vector<char*> vt;
    	const char * split = " "; 
    	p = strtok (str,split); 
    	while(p!=NULL) { 
    		//cout<<p;
    		vt.push_back(p);//     
    		p = strtok(NULL,split); //       
    	} 
    	//        ,      
    	while(vt.size()>0){
    		cout<<vt[vt.size()-1]<<" ";
    		vt.pop_back();
    	}
    	cout<<endl;	
    }
    
    void main()
    {
    	/*
    	    
    	*/
    	char str[100];
    	//    
    	cout<<"   ,    100"<<endl;
    	//    
    	//cin>>str;//     !
    	cin.getline(str,100);
    	cout<<"          :";
    	//    
    	cout<<strlen(str)<<endl;
    	//    
    	//cout<<str<<endl;
    	/*
    	//      !
    	for(int i=0;i<100;i++){
    		cout<<str[i];
    	}
    	*/
    	for(int i=0;i<strlen(str);i++){
    		cout<<str[i];
    	}
    	cout<<endl;
    
    	reverseStr(str);
    	system("pause");
    }</span>

    데이터 구 조 를 배 워 야 하 는 이 유 는 데이터 구조 모델 을 만족 시 키 는 현실 적 인 문제 가 많 기 때문이다.이 문제 보다 [뒤 집기 - 스 택]

    좋은 웹페이지 즐겨찾기