Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 언리얼엔진구조체
- 자료구조
- 크리티컬섹션
- map
- moreeffectiveC++
- C++
- UELOG
- stl
- 정렬
- 알고리즘
- 정렬알고리즘
- enumasByue
- 프로그래머스
- UE_LOG
- C++최적화
- 언리얼가비지컬렉터
- 데이터애셋
- 스마트포인터
- 델리게이트
- 약참조
- unorder_map
- 애셋로드
- 람다
- UE4 커스텀로그
- UML관련
- 강참조
- 선택정렬
- 람다사용정렬
- dataasset
- BFS
Archives
- Today
- Total
기억을 위한 기록들
[Code Wars] Replace With Alphabet Position(C++) 본문
https://www.codewars.com/kata/546f922b54af40e1e90001da/train/cpp
문제는 이렇다
In this kata you are required to, given a string, replace every letter with its position in the alphabet.
If anything in the text isn't a letter, ignore it and don't return it.
"a" = 1, "b" = 2, etc.
이 문제에서는 문자열이 주어진 모든 문자를 알파벳의 위치로 바꾸어야 합니다.
텍스트에 있는 것이 글자가 아니라면 무시하고 반환하지 마십시오.
예를 들어 "a" = 1, "b" = 2,..
문제는 크게 어렵지 않다. 주어진 문자열에 있는 글자에 대한 알파벳의 위치( a가 1부터 순차적으로..)으로 변경하는 것이다.
내가 작성한 코드
#include <string>
#include <sstream>
#include <cctype>
std::string alphabet_position(const std::string &text) {
std::stringstream ss(text);
std::string Result;
// 공백을 기준으로 문자열 분리
std::string token;
while (ss >> token)
{
int value = 0;
for(auto item : token)
{
if('a' <=item && item <= 'z')
{
value = (int)(item) - 96;
Result += std::to_string(value) + " ";
}else if('A' <=item && item <= 'Z')
{
value = (int)(item) - 64;
Result += std::to_string(value) + " ";
}
}
}
if (!Result.empty())
{
Result.pop_back();
}
return Result;
}
다른 사람 풀이
#include <cctype>
#include <sstream>
#include <string>
std::string alphabet_position(const std::string &s) {
std::stringstream ss;
for (auto &x : s)
{
if (std::isalpha(x))
{
ss << (x | 32) - 96 << ' ';
}
}
std::string r = ss.str();
if (r.size())
{
r.pop_back();
}
return r;
}
이 글을 작성한 이유가 사실 다른 사람의 코드를 보고 작성하게 되었다.여기서 이 부분이다.
ss << (x | 32) - 96 << ' ';
ASCII 코드에서 대문자와 소문자 사이의 차이는 32이고, 비트 OR 연산을 사용하여 6번째 비트를 1로 설정함으로써 +32가 된다. 그렇게 되면 대문자를 소문자로 변환하게 한다. 그후에 96을 빼서, ASCII 코드에서 소문자 'a'의 값은 97이기 때문에, 'a'가 1의 위치에 오도록 하기 위해 96을 뺀다
'Coding Test - cpp > Etc' 카테고리의 다른 글
[Code Wars] Take a Ten Minutes Walk(C++) (1) | 2024.01.09 |
---|---|
[Code Wars] Replace With Alphabet Position(C++) (1) | 2023.12.21 |
[Code Wars] Buying a car(C++) (0) | 2023.12.08 |
[프로그래머스 Lv 0] 안전지대 C++ (0) | 2023.11.28 |
[Code Wars] Remove the minimum(C++) (1) | 2023.11.26 |