アルゴリズム基本知識C++とJava比較:文字列編


右側の
  • ディレクトリを確認し、必要な部分
  • を表示します.
    文字列
    //C++에서 문자열 사용 및 관련 메소드 사용하려면 string 헤더 import해야함
    #include <string>
    部分文字列インデックスの検索
    C++
    size_t index = str.find("apple"); //문자열 검색
    index = str.find('a'); //문자(char형) 검색
    //해당 문자열/문자가 시작되는 인덱스를 반환함
      
    index = str.find("apple",10); //문자열을 10번째 index부터 검색
    
    ここはとても重要です
    .find()の文字列(文字)が存在しない場合は、-1を返します.逆も同様です.int型に含まれない大きなゴミ値を返します.
    C++コンパイラバージョンによっては、-1が出力される場合があります.これは混同を招く可能性があります.
    したがって、上記のコードはintではなくsize tを使用しています.
    また,この点(単語が存在するか否か)を理解するために,Nopositionを表すstring::nposを用いた.
    string str = "Hello";
    bool check = string::npos == str.find('z'); //1, true
    Java
    int index = str.indexOf("welcome"); //문자열 검색
    index = str.indexOf('t'); //문자(char형) 검색
    //해당 문자열/문자가 시작되는 인덱스를 반환함
    
    index = str.indexOf("welcome",10); //문자열을 10번째 index부터 검색
    index = str.indexOf('t',10); //문자를 10번째 index부터 검색
    
    boolean check = s.contains("welcome") //단순히 찾기
    //char형은 안됨
    文字列の置換、一部の文字列の抽出
    C++
    .replace()メソッドは、形状によって異なる機能を有し、cotteでよく使用される形状の例のみを示す.メソッドの詳細については、次のリンクを参照してください.
    //교체
    str.replace(index, length, subStr);
    //index: 바꾸고자 하는 문자열 시작 인덱스
    //length: 시작 인덱스부터 바꾸고자 하는 길이
    //subStr: 삽입하고자 하는 문자열  
    //subStr 자리에 문자(char형) 지원하지 않음
      
    string str = "Hello world";
    str.replace(6, 5, "apple"); //Hello apple
      
    //추출
    string subStr = str.substr(index); //인덱스부터 끝까지 추출
    string subStr = str.substr(index, length); //인덱스부터 length 길이 부분 문자열 추출
    ソース:https://modoocode.com/250
    Java
    String str = "동해. 물과. 백두산이. 마르고. 닳도록.";
      
    //모든 문자열 바꾸기
    str = str.replace(".", "!"); //동해! 물과! 백두산이! 마르고! 닳도록!
    
    //처음에 발견한 문자열 바꾸기(바꾼 횟수를 구할 때 유용)
    str = str.replaceFirst(".", "!"); //동해! 물과. 백두산이. 마르고. 닳도록.
    //C++와 다르게 문자열에 메소드를 사용만 한다고 바뀌지 않는다. 반환값을 받아야한다.
    //이 두개 말고 바꿀 문자열에 정규식을 사용하는 .replaceAll() 메소드가 있는데 코테에서 거의 사용하는 일이 없으니 소개하지 않습니다. 
    
    //중요! char형 오버로딩 여부: 아래 두개만 가능
    str.replace(String, String);
    str.replace(char, char);
      
    //추출
    str = str.substring(beginIndex, endIndex); //beginIndex부터 endIndex-1까지 추출
    str = str.substring(index); //index부터 끝까지 추출
    数値->文字列、文字列->数値
    C++
    //숫자->문자열: to_string()
    #include <string>
    int number_int = 1234;
    string str = to_string(number_int); //"1234"
    
    double number_double = 1234.1234; 
    str = to_string(number_double); //"1234.123400"
    //소수점 아래 여섯 자리까지 표현함. 원하는 만큼 표현하기 위해서는 반올림 버림 등 메소드를 적절하게 활용해야 함.
      
    //문자열->숫자: stoi()
    #include <string>
    string str_int = "1234";
    int number_int = stoi(str_int) //1234
    
    string str_double = "1234.12";
    double number_double = stod(str_double) //1234.12
    //float형 변환을 위한 stof도 있음
      
    Java
  • 数字->文字列
    整数(Integer)Integer.toString()
    浮動小数点(Float)Float.toString()
    実数(Double)Double.toString()
    ドラゴンtoString()
  • int number_int = 1234;
    string str = Integer.toString(number_int); //"1234"
    
    double number_double = (double)1234.1234;
    str = Double.toString(number_double); //"1234.1234"
    
    float number_float = (float)1234.1234;
    str = Float.toString(number_float); //"1234.1234"  
  • 文字列->数値
    整数(Integer)Integer.parseInt()
    浮動小数点(Float)Float.parseFloat()
    実数(Double)Double.parseDouble()
    ドラゴンparseLong()
  • String str_int = "1234";
    int number = Integer.parseInt(str_int);//1234
      
    String str_double "1234.12";
    double number = Double.parseDouble(str_double);//1234.12
    文字列の比較
    C++
  • strcmp(), compare(), ==
  • //C에서는 string 클래스가 없고 char형 배열로 문자열을 관리하기 때문에 strcmp() 함수를 사용함.
    //코테는 C++ string 클래스를 사용하니, 알아두는 정도만 보자.
    
    char str1[] = "Hello";
    char str2[] = "Hello";
    int check = strcmp(str1, str2); //0
    
    check = strcmp("aa", "bb"); //-1: 첫 번째 매개변수가 사전순 앞에 있으면 -1 반환
    check = strcmp("bb", "aa"); //1: 첫 번째 매개변수가 사전순 뒤에 있으면 1 반환
      
    //일반적으로 사용하는 C++ string
    //C++는 ==와 .compare() 메소드 차이가 거의 없음(compare()가 좀 더 빠른 정도). string의 == 연산자를 연산자 오버로딩을 통해 구현함.
    //따라서 그냥 == 연산자를 사용해도 무관함
    //자세한 이야기는 아래 출처 링크를 참조하세요.
    
    string str1 = "Hello";
    string str2 = "Hello";
    int check = str1.compare(str2); //0
    
    str1 = "aa";
    str2 = "bb";
    check = str1.compare(str2); //-1
    check = str2.compare(str1); //1
    
    bool check = str1 == str2; //false;
    
    ソース:https://choryeonworkshop.tistory.com/119
    Java
  • equals()
  • //Java는 C++와 다르게 == 연산자를 사용하면 주솟값을 비교함
    //문자열 비교는 무조건 .equals() 메소드만 사용함
    //자세한 이야기는 아래 출처 링크를 참조하세요.
      
    String str1 = "hello";
    String str2 = "hello";
    boolean check = str1.equals(str2); //true;
    ソース:https://coding-factory.tistory.com/536