표준 입출력 조작 방법 (Obj-C)

소개



"HackerRank"라는 프로그래밍 문제를 해결하는 사이트가 있습니다.
htps //w w. 는 c 캬란 k. 이 m

이 사이트에서는 "표준 입력을 얻는다 → 문제를 해결 → 해결 결과를 표준 출력한다"라는 흐름으로 문제를 해결합니다.

Objective-C로 표준 입출력을 조작하는 방법에 힘들었으므로, 비망록으로서 남겨 둡니다.

환경


  • OS: macOS High Sierra 10.13.1
  • Xcode: 9.2

  • 프로젝트 만들기



    표준 I/O를 처리하려면 명령줄 도구의 프로젝트를 만듭니다.

    Xcode를 시작하고 Create a new Xcode project를 클릭하십시오.


    macOS 탭에서 Command Line Tool을 선택하고 Next 버튼을 클릭합니다.


    그리고는 통상의 프로젝트와 같게 작성합니다.

    표준 입출력 구현 (Obj-C)



    명령줄 도구 프로젝트는 거의 빈 주 파일만 존재합니다.

    main.m(before)
    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            // insert code here...
            NSLog(@"Hello, World!");
        }
        return 0;
    }
    
    @autoreleasepool 내부를 다음과 같이 다시 씁니다.

    main.m(after)
    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            // 標準入力を取得する
            NSData *stdinData = [[NSFileHandle fileHandleWithStandardInput] availableData];
            NSString *stdinString = [[NSString alloc] initWithData:stdinData encoding:NSUTF8StringEncoding];
    
            // 標準入力を半角スペース区切りで配列に格納する
            NSArray *stdinArray = [stdinString componentsSeparatedByString:@" "];
    
            // TODO: 問題を解く
            // ここでは標準入力をそのまま解答とする
            NSArray *result = [stdinArray copy];
    
            // 解答を半角スペース区切りで文字列とする
            NSString *stdoutString = [result componentsJoinedByString:@" "];
    
            // 解答を標準出力する
            NSFileHandle *fileHandle = [NSFileHandle fileHandleWithStandardOutput];
            [fileHandle writeData:[stdoutString dataUsingEncoding:NSUTF8StringEncoding]];
            [fileHandle writeData:[@"\n" dataUsingEncoding:NSUTF8StringEncoding]];
            [fileHandle closeFile];
        }
    
        return 0;
    }
    

    표준 입출력 디버깅



    일반 프로젝트와 마찬가지로 ⌘R로 디버깅합니다.

    표준 입력을 수락할 때까지 대기하므로 화면 오른쪽 하단의 콘솔에 값을 입력하고 Enter 키를 누릅니다.


    이번에는 표준 입력을 그대로 표준 출력하고 있기 때문에 표준 입력과 같은 값이 굵게 출력됩니다.


    결론



    이번에 만든 프로젝트를 GitHub에서 공개했습니다.
    htps : // 기주 b. 코 m / 우호 오이 / St.

    실제의 출력에는 NSLog 를 사용하는 것이 대부분이라고 생각하고, 표준 입력은 사용하지 않기 때문에, 이러한 프로그래밍 사이트 밖에 사용하지 않을지도 모릅니다.

    참고 링크


  • [개편] Swift로 Paiza 문제 해결 - Qiita
  • 좋은 웹페이지 즐겨찾기