[解決済み] C++の文字列を複数行に分割する (構文解析ではなくコード構文解析)
2023-07-22 04:36:42
質問
文字列をパースして賢く分割する方法と混同しないように、例.
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++ の文字列を複数行に分割する、より短く、よりエレガントな(たとえば、明らかにトリプルクォートなどは c++ ではサポートされていませんが、より Python 的な)方法があるかどうか疑問に思っていました。
これが特に望ましい場所の1つは、関数に長い文字列リテラルを渡すときです (たとえば、文章)。
どのように解決するのですか?
文字列の間に何も入れないでください。 C++ の字句解析段階の一部は、隣接する文字列リテラルを (改行やコメントの上でも) 1 つのリテラルに結合することです。
#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;
}
を混在させたい場合は
#define
dの整数定数をリテラルに混ぜる場合は、いくつかのマクロを使用する必要があります。
#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
の実際の値を文字列リテラルにするために 2 つのレベルのマクロが必要です。
関連
-
[解決済み】coutはstdのメンバではない
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み] YAML の文字列を複数行に渡って分割するには?
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] 文字列を複数の単語境界のデリミタで単語に分割する
-
[解決済み] 複数の文字列が別の文字列の中に存在するかどうかをチェックする
-
[解決済み] IFステートメントを使用しているときに、シェルコマンドを複数行に分割するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?