developer tip

C ++ 문자열을 여러 줄로 분할 (파싱이 아닌 코드 구문)

copycodes 2020. 11. 24. 08:06
반응형

C ++ 문자열을 여러 줄로 분할 (파싱이 아닌 코드 구문)


현명하게 구문 분석하는 문자열을 분할하는 방법과 혼동하지 마십시오. 예 :
C ++에서 문자열 분할?

C ++에서 문자열을 여러 줄로 분할하는 방법에 대해 약간 혼란 스럽습니다.

간단한 질문처럼 들리지만 다음 예를 들어 보겠습니다.

#include <iostream>
#include <string>
main() {
  //Gives error
  std::string my_val ="Hello world, this is an overly long string to have" +
    " on just one line";
  std::cout << "My Val is : " << my_val << std::endl;

  //Gives error
  std::string my_val ="Hello world, this is an overly long string to have" &
    " on just one line";  
  std::cout << "My Val is : " << my_val << std::endl;
}

나는 std::string append()방법을 사용할 수 있다는 것을 알고 있지만, C ++의 문자열을 여러 줄로 나누는 방법이 더 짧고 / 더 우아한 (예 : 더 pythonlike, 분명히 트리플 따옴표 등은 C ++에서 지원되지 않음) 방법이 있는지 궁금합니다. 가독성.

이것이 특히 바람직한 곳은 긴 문자열 리터럴을 함수 (예 : 문장)에 전달할 때입니다.


문자열 사이에 아무것도 넣지 마십시오. C ++ 렉싱 단계의 일부는 인접한 문자열 리터럴 (줄 바꿈 및 주석을 통해)을 단일 리터럴로 결합하는 것입니다.

#include <iostream>
#include <string>
main() {
  std::string my_val ="Hello world, this is an overly long string to have" 
    " on just one line";
  std::cout << "My Val is : " << my_val << std::endl;
}

리터럴에 개행을 원하면 직접 추가해야합니다.

#include <iostream>
#include <string>
main() {
  std::string my_val ="This string gets displayed over\n" 
    "two lines when sent to cout.";
  std::cout << "My Val is : " << my_val << std::endl;
}

#defined 정수 상수를 리터럴 에 혼합 하려면 몇 가지 매크로를 사용해야합니다.

#include <iostream>
using namespace std;

#define TWO 2
#define XSTRINGIFY(s) #s
#define STRINGIFY(s) XSTRINGIFY(s)

int main(int argc, char* argv[])
{
    std::cout << "abc"   // Outputs "abc2DEF"
        STRINGIFY(TWO)
        "DEF" << endl;
    std::cout << "abc"   // Outputs "abcTWODEF"
        XSTRINGIFY(TWO) 
        "DEF" << endl;
}

stringify 프로세서 연산자가 작동하는 방식으로 인해 이상한 점이 있으므로 실제 값을 TWO문자열 리터럴로 만들 려면 두 가지 수준의 매크로가 필요 합니다.


둘 다 리터럴입니까? 공백으로 두 개의 문자열 리터럴을 분리하는 것은 연결 "abc" "123"과 동일합니다 "abc123". 이것은 C ++뿐만 아니라 스트레이트 C에도 적용됩니다.


I don't know if it is an extension in GCC or if it is standard, but it appears you can continue a string literal by ending the line with a backslash (just as most types of lines can be extended in this manor in C++, e.g. a macro spanning multiple lines).

#include <iostream>
#include <string>

int main ()
{
    std::string str = "hello world\
    this seems to work";

    std::cout << str;
    return 0;
}

참고URL : https://stackoverflow.com/questions/3859157/splitting-c-strings-onto-multiple-lines-code-syntax-not-parsing

반응형