0

非常に大きな char 配列があり、配列を反復処理します。次のようなロジックを持つパターンを探します。

if (array[n] == 'x' and array[n+1] == 'y' and array[n+2] == 'z')
{
    mystring = array[n+4] + array[n+5];
}

配列[n+4]が「4」で配列[n+5]が「5」の場合、mystring = "45"

ただし、mystring は常に "" です。何が間違っていますか? 配列が大きすぎるため、部分文字列を使用したくありません。文字を文字列にキャストしてから、mystring に追加したいだけです。

4

5 に答える 5

4

assign(const char*, len); を使用することをお勧めします。コピー コンストラクターは含まれません。

if (array[n] == 'x' and array[n+1] == 'y' and array[n+2] == 'z')
{
   mystring.assign(array + n + 4, 2);
}
于 2013-09-01T20:13:37.617 に答える
2

連続した"xyz"発生をチェックしていますが、単に使用しないのはなぜstd::stringですか?

std::string s(array);

size_t i =s.find("xyz");
if(i!=std::string::npos && i+5 <= s.size())
{
    std::string mystring = std::string(1,array[i + 4]) + array[i + 5];
    std::cout<<mystring;
}
于 2013-09-01T19:47:50.347 に答える
0

char は基本的な言語型であるため、char を int にキャストしたり、その逆にキャストしたりできます。文字列はクラスとして実装されるため、両方の文字に対して文字列コンストラクターを呼び出し、結果の 2 つの文字列を mystring に連結する必要があります。

于 2013-09-01T19:46:45.403 に答える
0

@P0Wで提案されているように(これは良い提案です)、そもそも使用できない場合std::stringは、文字列コンストラクターを含まないこの変換を行う別の方法があります(文字列コンストラクターを使用したソリューションは素晴らしいと思います1 つですが、さまざまなアプローチを知っていると柔軟性が高まります)、std::string::append に依存しています。

int main ()
{
    // create char
    char *str1 = new char[6];
    strcpy( str1,"hello ");
    char *str2 = new char[5];
    strcpy(str2, "world" );

    // use of append to convert to a string
    std::string mystring;
    mystring.append(str1);
    mystring.append(str2);
    std::cout << mystring << std::endl;
}

std::string::append ドキュメントを確認すると、この関数のオーバーロードの 1 つが であることがわかります。これはstring& append (const char* s, size_t n)、要求に応じて、char 配列のサブセットのみを変換できることを意味します。

于 2013-09-01T20:01:06.547 に答える
0

文字列の追加は、C++ ではそのようには機能しません。これを行う簡単な方法は、 を作成し、 << 演算子を使用して文字列に文字を追加し、メソッドstringstreamを使用して文字列から文字列を復元することです。str()

例:

#include <iostream>
#include <sstream>

using namespace std;

int main(void)
{
    char a[] = {'a', 'd', 'c', 'b', 'a' };
    stringstream linestream;
    linestream << a[0] << a[1];
    cout << linestream.str() << endl; // Prints ad
    return 0;
}
于 2013-09-01T20:02:58.703 に答える