私は C++ を持っていますstring
。この文字列を、char*
パラメーターを受け入れる関数 (たとえば - strchr()
) に渡す必要があります。
a) そのポインターを取得するにはどうすればよいですか?
b) に相当する機能はありstrschr()
ますC++ strings
か?
C
に相当する文字列を取得するには、
関数を使用します。C++
string
c_str
char
します
。string
find_first_of
例:
string s = "abc";
// call to strlen expects char *
cout<<strlen(s.c_str()); // prints 3
// on failure find_first_of return string::npos
if(s.find_first_of('a') != string::npos)
cout<<s<<" has an a"<<endl;
else
cout<<s<<" has no a"<<endl;
注: を受け取るstrlen
関数の例を に示しましたchar*
。
驚くべきことに、std:;string には、C スタイルの文字列よりもはるかに多くの機能があります。おそらくfind_first_of()メソッドが必要です。一般に、C++ の std::strings で strxxx() 関数を使用していることに気付いた場合は、ほぼ間違いなく何か間違ったことをしています。
C++ 標準ライブラリの多くと同様に、文字列クラスは複雑な獣です。それを最大限に活用するには、優れた参考書が本当に必要です。Nicolai Josuttis によるThe C++ Standard Libraryをお勧めします。
char*
aから a を取得することはできませんstring
string
内部バッファへのアクセスを解放することはできません。null で終了する場合、または null で終了する必要がない場合、取得できる最も近いのはconst char*
usingです。.c_str()
.data()
その後、これらの関数によって返されたポインターをキャストできchar*
ますが、これは自己責任で行ってください。そうは言っても、文字列を変更していないことを確認している限り、これは比較的安全なキャストです。変更した場合、取得したポインターはc_str()
無効になる可能性があります。
このコード:
string str("Hello World!");
char* sp = (char*)str.c_str();
sp[5] = 'K';
おそらく大丈夫ですが、
これは:
string str("Hello World!");
char* sp = (char*)str.c_str();
str = "Chaged string";
sp[5] = 'K';
間違いなく大丈夫ではありません。
std::string yourString("just an example");
char* charPtr = new char[yourString.size()+1];
strcpy(charPtr, yourString.c_str());
文字列内の str の場合、str.c_str()
method を使用してその中の char* を取得します。
文字列リテラルを pw に割り当てたいだけの場合は、次のようにすることができます
char *pw = "Hello world";
C++ std::string objectがあり、その値をpwに割り当てたい場合は、次のようにすることができます
char *pw = some_string.c_str()
ただし、pw が指す値は、some_string の存続期間中のみ有効です。
詳細はこちら:
C++ で文字列を char *pw に割り当てる方法
幸運を!!
おそらく、この例はあなたを助けるでしょう
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string str ("Replace the vowels in this sentence by asterisks.");
size_t found;
found=str.find_first_of("aeiou");
while (found!=string::npos)
{
str[found]='*';
found=str.find_first_of("aeiou",found+1);
}
cout << str << endl;
return 0;
}
C++ 標準は、文字列の最初の要素へのポインターを返すクラス std::basic_string の 2 つのメンバー関数を提供します。c_str()
とですdata()
。ただし、どちらも const char * を返すため、char * 型のパラメーターを持つ関数では使用できません。
関数 strchr に関しては、その最初のパラメータはconst char *
です。したがって、この関数で c_str() と data() を使用できます。find()
ただし、代わりにクラス sttd::basic_string のメンバー関数を使用する方がはるかに優れています。strchr.