JadenCase 문자열 만들기 문제링크

 

리뷰 

문자열에는 숫자도 공백문자도 포함되어 있다.

문자열을 하나씩 순회해서 문자마다 알파벳이 맞는지 확인하는 isalpha() 함수를 썼다. 이건 불필요한 작업이었다. 

공백이든 숫자든 toupper() 와 tolower() 에 영향을 받지 않고 에러도 안낸다..

공백과 연속된 문자를 대문자로 바꾸고, 나머지는 전부 lower 처리 하면 된다. 

 

맞았습니다 코드1

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

string solution(string s) {

  string answer = "";
  string space_delimiter = " ";
  int pos = 1;

  while(pos != string::npos){
    pos = s.find(space_delimiter);
    string w = s.substr(0, pos);

    if (isalpha(w[0])) { w[0] = toupper(w[0]); };
    for(int i = 1; i < w.size(); i++){
      if (isalpha(w[i])) { w[i] = tolower(w[i]); };
    }
    answer += (w + " ");
    s.erase(0, pos + space_delimiter.length());
  }
  answer = answer.substr(0, answer.size()-1);
  return answer;
}

 

 

더 짧은 맞았습니다 코드2

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

string solution(string s) {
  string answer = "";

  answer += toupper(s[0]);
  for(int i = 1; i < s.size(); i++){
    if(s[i-1] == ' '){ // 공백 뒤에 대문자
      answer += toupper(s[i]);
    }else{
      answer += tolower(s[i]);
    }
  }

  return answer;
}
728x90

+ Recent posts