아직은 파이썬 했던 습관이 남아있는가보다

처음에 문제 보고 든 생각은

크로아티아 알파벳이 들어있는 배열을 만든다음에

입력받은 문자 안에 크로아티아 알파벳이 있는지 찾고,

맞으면 ++하고 그 문자를 삭제한 다음에 삭제되고 남은 문자열의 길이를 더하는 것

근데 c++에서 파이썬 처럼 그런 방식이 가능한지 찾아봐야했고,,

string, algorithm 함수에서 find 가 가능하다는 것을 알게됐다!

그래서 이왕 하는김에

find로 원하는 것을 찾고, 그거를 그냥 특수문자 하나로 바꿔버린다음

바뀌고 난 후의 문자열 길이를 출력하면 그게 더 간단하지 않을까?

include <iostream>
#include <string>
using namespace std;

int main(){
    string word;
    string alpa[8] = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
    cin >> word;
    for(int i =0; i<8; i++) word.replace(word.find(alpa[i]), (alpa[i]).length(), "#");
    cout << word.length();
}

1트

런타임 에러가 떴다

아무래도 문자길이가 길거나 하면 찾기 힘들거같기도 하고,,

방금 그걸 몇번씩이나 더 반복해야되는거니까

다시 수정

#include <iostream>
#include <string>
using namespace std;

int main(){
    string word;
    string alpa[8] = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
    cin >> word;
    for(int i =0; i<8; i++) {
        while(1){
            if(word.find(alpa[i]) != -1){
// 만약에 find 돌려서 내가 원하는 문자가 없는 것이 아니라면 다음을 실행해라
                word.replace(word.find(alpa[i]), alpa[i].length(), "#");
//relace(바꾸고 싶은거, 바꿀 문자 길이, 뭐로 바꿀래)
            } else break;  //아니면 루프 탈출하고 다음 i로 넘어가기~
        }
    }
    cout << word.length();
}

while(1) 은 while(true)랑 동일

내가 break를 해서 빠져나가야하는 반복문이다

+ Recent posts