비교. C++, C#, 파이썬 리터럴 문자열 사용법

리터럴이란? 리터럴이란 말 그대로 ‘글자 그대로’라는 뜻이다. 변수나 정수 심볼과는 달리 코드에 직접 입력한 숫자나 문자열 등을 리터럴이라고 한다. 예를 들면 123, 1.24, “hello”, true 등이 있다. 리터럴도 표기 방법에 따라 유형이나 진수 등을 명시할 수 있다. C++로 float 접미사 ‘-f’, 16진수 접두사 ‘0x’가 있다.Howtode clare and definestring and characterliteralsin C+.docs.microsoft.com 일반적으로 리터럴 타입에 대해 별로 신경쓰지 않지만 변수 타입에 맞춰 암시적으로 타입 변환이 일어나기 때문이다.단, 리터럴 타입이 중간 계산에 영향을 미쳐 최종 계산결과가 바뀌는 경우도 있으므로 주의할 필요가 있다.상기의 예제에서, 숫자 리터러르는 기본적으로 int 타입이기 때문에, 31비트 시프트하면 음수가 된다. 여기서 2로 나누어도 역시 음수이다.

리터럴을 unsigntint 타입으로 하면 31비트 쉬프트하면 양수를 유지하고, 여기서도 역시 2로 나누어도 양수이다.

여기에서는 시프트로 했지만, 실제로는 ‘+’와 같이 데이터가 누적되는 경우에 종종 문제가 발생한다. 최종결과는 int타입으로 충분하지만, 중간계산에서 정수오버플로가 일어나 최종계산이 터무니없는 경우가 있다. 리터럴 타입을 명시해 대처해야 한다.

오버로딩된 함수 중 어느 함수를 호출할 것인지, 저정할 때도 리터러(literal)가 중요하다. 오버로드 함수 중에 unsignedint 매개변수용 함수를 호출하고자 할 때는 리터럴에 접미사 “U”를 붙여 unsignedint 타입임을 명시해야 한다.C++11 이후로 auto 타입이 광범위하게 사용되고 있다. 리터럴 타입이 변수 타입을 결정하기 때문에, 그 어느 때보다 리터럴 타입의 중요성이 높아지고 있다.여기까지가 리터러에 대한 배경이고, 지금부터는 문자열 리터러일에 대해 알아본다. C++ 큰 따옴표 C/C++는 큰 따옴표와 작은 따옴표의 구분이 확실하다. 큰따옴표는 문자열, 작은따옴표는 단일문자이다.

여러 줄 리터럴 문자열의 긴 문자열을 여러 줄로 나눌 경우 역슬래시를 사용할 수도 있지만 단순히 문자열을 나누는 것이 더 편하고 읽기 쉽다. C/C++는 문자열을 잇고 있으면 일자열에 맞추어 인식한다.리터럴 문자열 그대로 말장난 같다. ‘정렬’

‘와 같이 역슬래시를 에스케이프로 인식하지 않고 코드상의 리터럴을 그대로 인식하는 방식이다. 지금까지 C/C++에는 이 기능이 없어서 불편했는데, C++11부터는 R” ()” 안에 문자열을 넣으면 된다.std :: string 리터럴 C++ 로 리터럴 문자열의 유형은 const char [ ] 이다. 리터럴 문자열을 std::string유형으로 지정할 수 없는가? 문자열 조작을 하면 std::string멤버 함수 및 연산자를 사용하면 가독성과 메모리 관리에 장점이 많다. 그러나 리터럴 문자열은 std::string유형이 없어 임시 객체를 생성해야 하지만 그다지 산뜻한 방법은 아니다.C++14새로 도입된 std::string_literals는 문자열에 접미사’-s’만 켜면 std::string유형으로 지정할 수 있다. (그 방법 3)!단, 문법이 아닌 라이브러리에서 제공하는 기능이므로 사용하기 전에 using namespace std::string_literals를 선언하지 않으면 안 된다.std;literals::string_literals;operator””s Defined in header<string>(1)std::string operator””s(const char*str, std::size_t len)(sinceC++14)(untilC++20)constexpr std::string operator””s(const char*str, std::size_t len)(sinceC++20)constexpr std::u8string operator””…en.cppreference.com문자열 포맷팅 문자열 포멧티은용에 C함수 sprintf()과 C++std::stringstream을 많이 사용한다. sprintf()은 버퍼 크기를 미리 지정해야 하기 때문에 불편할 뿐만 아니라 버퍼 오버 플로우의 온상이 되기 쉽다. 한편 std::stringstream은 스트림 방식이기 때문에 문자열에서는 별로 직관적이지 않고 가독성도 상당히 떨어진다.

그래서 나는 종종 C++용 format()함수를 만들어 사용한다.samples/format.h at master, dychoe80/samples(github.com)format문법은 printf()을 그대로 사용하지만 함수 내부에서 버퍼의 크기를 계산하고 std::string를 리턴 하고 있으므로 편하다.

C++20새로 도입된 std;format()는 C#, Python와 문법이 비슷하다. 문자열, 인터폴 레이션 기능은 없지만 C++포맷팅 함수에서는 가장 진보적으로 보인다. 아쉽지만 아직 VisualStudio2019, g++에는 구현되지 않아 좀 기다리지 않으면 안 된다.std;format Defined in header<format>template<class … Args>std::string format(std::string_view fmt, const Args&… args)(1)(since C++20)template<class … Args>std;wstring format(std;wstring_view fmt, const Args&… args)(2)(since C++20)template<class … Arg.en.cppreference.com당분간 fmtlib/fmt:Amodernformattinglibrary(github.com)을 써도 좋다.C# 큰 따옴표와 작은 따옴표 C/C++과 마찬가지로 큰 따옴표와 작은 따옴표 구분이 확실하다. 큰 따옴표는 문자열, 작은 따옴표는 단일 문자이다.

여러 행 리터럴 문자열 긴 리터럴 문자열을 여러 행으로 나눌 때는 단순히 각 문자열을 ‘+’로 붙일 뿐이다. 줄 바꾸기까지 포함한 긴 문자열을 모두 표현하려면 접두사 @를 이용하면 된다.리터럴 문자열인 채로 접두사 「@」를 붙이면, 역슬래시를 s케이프 하지 않고 리터럴 문자대로 인식한다.문자열 포맷팅 문자열 포맷 방법은 전반적으로 파이썬과 매우 비슷하다. 문자열 인터포레이션을 사용할 때는 접두사 “$”를 붙인다.Converts the value of objects to strings based on the formats specified and inserts them into another string. If you are new to the String.Format method, see the Get started with the String.Format method section for a quick overview. See the Remarks section for general documentation for the String.F…docs.microsoft.comString interpolation provides a more readable and convenient syntax to format string output than traditional string composite formatting.docs.microsoft.com 파이썬 큰 따옴표와 작은 따옴표 C/C+, C#와 달리 파이썬에는 문자열을 표현할 때 큰 따옴표를 사용해도 되고 작은 따옴표를 사용해도 된다. 개인적으로는 작은 따옴표를 좋아한다. 문자열마다 어딘가에겐 작은 따옴표, 어딘가에겐 큰 따옴표를 쓰면 정신없어 보이므로 통일하는 것이 좋다.

여러 개의 쥴리터럴 문자열 C/C++와 비슷하게 여러 개의 문자열을 연달아 나열하면 자동으로 붙여준다. 단, 파이썬에서는 한 문장(statement)을 여러 줄로 나누기 위해서는 역슬래시를 사용해야 한다. 블록 주석을 사용할 수도 있는데 이때는 줄 바꿈까지 포함된다.리터럴 문자열인 채로 접두사 「r」를 붙이면 역슬래시를 s케이프 하지 않고 리터럴 문자열인 채로 인식한다.문자열 포맷 파이슨은 연산자 ‘%'(modulooperator)를 사용한 문자열 포맷을 지원한다. 사용법은 Csprintf()와 유사하다.파이썬3에서 새로운 포맷 방법을 지원한다. C#과 비슷하다.파이썬 3.6부터 문자열 인터포레이션을 지원한다. 가독성 측면에서 새로운 포맷 방법을 강력히 추천한다.Learn the four main approaches to string formatting in Python, as well as their strengths and weaknesses. You’ll the also gimet a

error: Content is protected !!