2012-01-22 23 views
9

Có cách nào trong C++ để trích dẫn một chuỗi mà không phải thoát bằng dấu gạch chéo ngược không? Ví dụ, tôi muốn một cách để lưu trữ một số mã Latex trong một chuỗi, chẳng hạn như \documentclass{article}. Tôi có thể làmBáo giá kiểu Perl cho chuỗi dài trong C++

string latex_code = "\\documentclass{article}" 

Nhưng điều đó gây khó chịu khi bạn phải thoát khỏi nhiều thứ, ví dụ: nếu bạn có nhiều mã latex. Trong Perl, tôi nhớ rằng bạn có một số công cụ trích dẫn rất hữu ích. Xem ví dụ: các phần "q" và "qq" tại đây: http://www.perlmonks.org/?node_id=401006

Có điều gì tương tự trong C++ không? Điều duy nhất tôi có thể nghĩ là dán mã Latex vào một tập tin bên ngoài và đọc nó. Nhưng điều đó cũng có vẻ khó chịu.

Trả lời

12

C++ 11 có một cách:

R"(The String Data \ Stuff ")" 
R"delimiter(The String Data \ Stuff ")delimiter" 

Trong trường hợp đầu tiên, tất cả mọi thứ giữa "(và)" là một phần của chuỗi. "Và \ ký tự không cần phải được thoát. Trong trường hợp thứ hai," delimiter (bắt đầu chuỗi, và nó chỉ kết thúc khi) delimiter "đạt được. Các delimiter chuỗi có thể là bất kỳ chuỗi lên đến 16 ký tự, Chuỗi này không thể chứa dấu cách, ký tự điều khiển, '(', ')' hoặc ký tự '\'. Việc sử dụng chuỗi dấu phân cách này cho phép người dùng có các ký tự ")" trong các chuỗi ký tự thô. Ví dụ, R "delimiter ((az)) delimiter" tương đương với "(az)"

http://en.wikipedia.org/wiki/C%2B%2B11

Đó là không thể trong C++

4

C++ 0x 03. có several new string literals. Một trong số chúng là chuỗi ký tự thô cho phép bạn sử dụng các dấu phân cách khác nhau cho chuỗi của bạn. Chuỗi thô bắt đầu bằng ký tự R. Một chuỗi ký tự thô cơ bản sẽ là R"(Hello, World!)". Ở đây mọi thứ giữa "()" là một phần của chuỗi.

Bạn cũng có thể chỉ định các dấu phân tách khác nhau bằng cách đặt một số chuỗi ở giữa các ký tự "(. Ví dụ: chuỗi thô R"delimiter(Hello, World!)delimiter" có cùng chuỗi như trên ngoại trừ chuỗi sử dụng "delimiter( làm dấu phân cách. Phần delimiter có thể chứa tối đa 16 ký tự và không được chứa dấu cách, (, ) hoặc / ký tự.

Vì đây là tính năng C++ 0x, nó yêu cầu trình biên dịch tương thích C++ 0x. Có vẻ như gcc đã hỗ trợ tính năng này kể từ phiên bản 4.5 và clang kể từ phiên bản 3.0.

Các vấn đề liên quan