C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.89171 の関連記事表示

<< 0 >>
■89171  stringクラス文字列を文字数で区切りたい
□投稿者/ ビキナー -(2018/11/04(Sun) 14:22:17)

    分類:[C/C++] 

    タイトルの通りです。言語はC++です。

    stringクラスで宣言した文字列を、文字数で区切る良い方法はないでしょうか?

    例(3ビットで区切りたい):
    string str = "123456789012";
    string str2[10];

    結果
    str2[0] = "123"
    str2[1] = "456"
    ・・・

    みたな感じにしたいと思っています。
親記事 /過去ログ153より / 関連記事表示
削除チェック/

■89173  Re[1]: stringクラス文字列を文字数で区切りたい
□投稿者/ Jitta -(2018/11/04(Sun) 20:43:07)
    No89171 (ビキナー さん) に返信
    > タイトルの通りです。言語はC++です。
    >
    > stringクラスで宣言した文字列を、文字数で区切る良い方法はないでしょうか?
    >
    > 例(3ビットで区切りたい):
    > string str = "123456789012";
    > string str2[10];
    >
    > 結果
    > str2[0] = "123"
    > str2[1] = "456"
    > ・・・
    >
    > みたな感じにしたいと思っています。


    一度、書いてみるといいですよ。

    0番目・・・0から
    1番目・・・3から
    2番目・・・6から
    3番目・・・9から

    n番目の文字列は、区切りたい文字数×(n−1)番目から始まる。
記事No.89171 のレス /過去ログ153より / 関連記事表示
削除チェック/

■89174  Re[2]: stringクラス文字列を文字数で区切りたい
□投稿者/ ビキナー -(2018/11/04(Sun) 21:10:35)
    No89173 (Jitta さん) に返信
    > ■No89171 (ビキナー さん) に返信
    >>タイトルの通りです。言語はC++です。
    >>
    >>stringクラスで宣言した文字列を、文字数で区切る良い方法はないでしょうか?
    >>
    >>例(3ビットで区切りたい):
    >>string str = "123456789012";
    >>string str2[10];
    >>
    >>結果
    >>str2[0] = "123"
    >>str2[1] = "456"
    >>・・・
    >>
    >>みたな感じにしたいと思っています。
    >
    >
    > 一度、書いてみるといいですよ。
    >
    > 0番目・・・0から
    > 1番目・・・3から
    > 2番目・・・6から
    > 3番目・・・9から
    >
    > n番目の文字列は、区切りたい文字数×(n−1)番目から始まる。
    >


    回答ありがとうございます。
    それはchar型配列の話ではないのです??

    stringクラス型配列の場合の話は、また話が変わってくるのではないのでしょうか?
記事No.89171 のレス /過去ログ153より / 関連記事表示
削除チェック/

■89175  Re[3]: stringクラス文字列を文字数で区切りたい
□投稿者/ Azulean -(2018/11/04(Sun) 22:26:05)
    No89174 (ビキナー さん) に返信
    > 回答ありがとうございます。
    > それはchar型配列の話ではないのです??
    >
    > stringクラス型配列の場合の話は、また話が変わってくるのではないのでしょうか?

    string は char 配列を内包したようなものなので、イテレーターを使うとか、data/c_str 関数を使うとかすれば、char 配列っぽく扱えますけどね。
    指定した範囲の文字列を取り出したいなら substr でよいでしょう。
記事No.89171 のレス /過去ログ153より / 関連記事表示
削除チェック/

■89181  Re[3]: stringクラス文字列を文字数で区切りたい
□投稿者/ にゃるら -(2018/11/05(Mon) 12:37:13)
    No89174 (ビキナー さん) に返信
    まずstringクラスってなんでしょうか。
    std::stringクラスのことでしょうか、CStringクラスのことでしょうか?それとも別?

    No89173 (Jitta さん) はヒントを与えてくれています。
    文字列を扱うクラスであれば、何番目の文字ってのにアクセスできる関数が付いていると思います。
    それを使って、文字列の読み取りたい位置を見つけて、ほしい分だけ読み進めればよいよってことだと思います。
    その読み取りたい位置を探すのがn番目であれば、区切りたい文字数×(n−1)、って計算で求められるよってことなのではないでしょうか。
    std::stringなら、at関数でほしい位置のcharが得られます。itreratorを使うのもいいと思います。
    ほしい長さのchar配列をつくり、そこに得た文字を埋め込み、char[]->stringしてくれる関数(std::stringならコンストラクタ)を呼べばよいかと。

    途中でchar[]->stringをしたくないのであれば、ほしい文字列の位置から一定の長さで「文字列」として取得するstd::stringのsubstr関数を使ってみると良いと思います。(■No89179 (魔界の仮面弁士 さん) が、その詳細を書いていただけてますね)
記事No.89171 のレス /過去ログ153より / 関連記事表示
削除チェック/

■89185  Re[3]: stringクラス文字列を文字数で区切りたい
□投稿者/ Jitta -(2018/11/05(Mon) 13:50:08)
    No89174 (ビキナー さん) に返信
    > 回答ありがとうございます。
    > それはchar型配列の話ではないのです??
    >
    > stringクラス型配列の場合の話は、また話が変わってくるのではないのでしょうか?

    「文字列を文字数で区切りたい」のでしょ?
    では、何が、わからないのでしょうか。
    「文字数で区切る良い方法はないでしょうか?」とのことなので、
    n番目の文字列が元の文字列の何番めから始まるのかがわからないのだと理解したのですが?
    string は、コンピュータ系ではたいてい「文字列」と訳されます。
    char型は、たいてい「文字型」と認識されます。
    文字が列になっているのが文字列なので、string型はたいてい、文字の配列と同じように扱えるよう、実装されています。

    ちなみに、「ビット」は、コンピュータ業界ではたいてい0か1の値をとります。
    元々の意味は「小さな破片」なので、文字列を「文字を単位とした破片の集合」とみなすのもアリかと思いました。

    あと、文字のバイト数は決まっていないことには留意しておきましょう。
記事No.89171 のレス /過去ログ153より / 関連記事表示
削除チェック/

■89179  Re[1]: stringクラス文字列を文字数で区切りたい
□投稿者/ 魔界の仮面弁士 -(2018/11/05(Mon) 11:55:29)
    No89171 (ビキナー さん) に返信
    > 例(3ビットで区切りたい):
    > string str = "123456789012";

    『3 ビット』で区切るの意味にもよりますが、
    "123……" という文字列を 3bit で区切ると
    → 16進数では: 31,32,33,……
    → 2 進数では: 00110001,00110010,00110011,……
    → 3 bit 区切: 001,100,010,011,001,000,110,011,……
    になりますね。


    > stringクラスで宣言した文字列を、文字数で区切る良い方法はないでしょうか?

    「3 ビット」なのか「3 文字」なのか「3 バイト」なのかで変わってきますが、
    > str2[0] = "123"
    > str2[1] = "456"
    という結果を得たいのであれば、Jitta さんや Azulean さんの回答を参考に
     str2[0] = str.substr(0u, 3u);
     str2[1] = str.substr(3u, 3u);
     str2[2] = str.substr(6u, 3u);
     str2[3] = str.substr(9u, 3u);
    になるように切り出していけると思います。
    ただし、マルチバイト文字は含まれないという前提で。


    using namespace std;

    size_t chunkSize = 3u;

    size_t const limitIndex = 10u;
    string str = "123456789012";
    string str2[limitIndex];

    size_t maxIndex = (size_t)ceil(str.length() / (double)chunkSize);
    if (limitIndex < maxIndex) { maxIndex = limitIndex; }
    for (size_t i = 0u; i < maxIndex; i++) { str2[i] = str.substr(i * chunkSize, chunkSize); }
記事No.89171 のレス /過去ログ153より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -