72220


提示コードのconst char*型とstring型で **.vertの部分を消して
"Basic"だけ別の変数に取り出し**表示させたいのですがどうすればいいのでしょうか？
調べましたが色々なやり方が出て来ますが自分のやりたい事とはちょっと違うため質問しました。

[code]

    #include <iostream>
    #include <string>
    
    int main()
    {
        std::string str = "Basic.vert";
        const char* ch = "Basic.vert";
    
        printf("%s\n",str);
    
        return 0;
    }
    
[/code]


CC BY-SA 4.0
2020-11-26T01:36:32.343
72213
2020-11-26T05:36:41.523
2020-11-26T03:45:39.007
26370
question
c++
文字列から特定の部分の文字以外の文字を取り出す方法が知りたいです。


あまりきれいではないですが、文字列の後ろ5文字を削ればとりあえずは達成できそうです。

[code]

    #include <iostream>
    #include <string>
    
    int main()
    {
        std::string str = "Basic.vert";
        std::string name = str.substr(0, str.size()-5);
    
        printf("%s\n", name.c_str());
    
        return 0;
    }
    
[/code]

"vert" 部分の長さが変わるのであれば、区切り文字の位置を特定する必要があり、その場合、区切り文字が複数あった場合 (たとえば
"Basic.vert.Basic.vertical") にどうするかを事前に決める必要が出てきます。


CC BY-SA 4.0
2020-11-26T03:35:51.893
72216
2020-11-26T03:35:51.893
20885
72213
answer


表示するだけなら新しい `std::string` を生成する必要などなくて、後ろ５文字を表示しないだけでよくて

[code]

    #include <stdio.h>
    #include <string.h>
    int main() {
        const char message[]="Basic.vert";
        printf("%.*s\n", strlen(message)-5, message);
    }
    
[/code]

でも十分っス（あららかぶった）


CC BY-SA 4.0
2020-11-26T05:12:33.667
72218
2020-11-26T05:12:33.667
8589
72213
answer


この記事の内容が応用できるのでは？  
[C++ std::string 文字列の分割（split）｜区切り文字／文字列に対応](https://marycore.jp/prog/cpp/std-
string-split/)

一番手軽なのが以下でしょう。  
[std::getline関数を活用した文字列分割](https://marycore.jp/prog/cpp/std-string-
split/#std%3A%3Agetline%E9%96%A2%E6%95%B0%E3%82%92%E6%B4%BB%E7%94%A8%E3%81%97%E3%81%9F%E6%96%87%E5%AD%97%E5%88%97%E5%88%86%E5%89%B2)

>
> `std::getline`関数は入力ストリームから行単位で文字列を読み込むための関数ですが、第三引数に区切り文字を指定することもできます。これを活用することで文字列分割の実現が可能となります。

質問のソースに当てはめると以下のようになります。  
`std::string str`と`const char* ch`を同等に扱えます。

[code]

    #include <sstream>  //// 追加
    #include <iostream>
    #include <string>
    
    int main()
    {
        std::string str = "Basic.vert";
        const char* ch = "Basic.vert";
    
        //// std::string str から切り出し
        std::stringstream sstr{ str };
        std::string buf1;
        std::getline(sstr, buf1, '.');
        printf("%s\n", buf1.c_str());
    
        //// const char* ch から切り出し
        std::stringstream sch{ ch };
        std::string buf2;
        std::getline(sch, buf2, '.');
        printf("%s\n", buf2.c_str());
    
        return 0;
    }
    
[/code]


CC BY-SA 4.0
2020-11-26T05:16:55.987
72219
2020-11-26T05:16:55.987
26370
72213
answer


[string::find_last_of](http://www.cplusplus.com/reference/string/string/find_last_of/)
を使う方法など。

[code]

    #include <iostream>
    #include <string>
    
    int main()
    {
      std::string str = "Basic.vert";
    
      printf("%s\n", str.substr(0, str.find_last_of(".")).c_str());
    
      return 0;
    }
    
[/code]


CC BY-SA 4.0
2020-11-26T05:36:41.523
72220
2020-11-26T05:36:41.523
72213
answer