0

文字列の一部を取得する方法。

たとえば、文字列は次のとおりです。

入力文字列: "53 56 4B 00 00 41 41 2F 41 54 43 43 54 52 31 2E 41 54 31 2E 4E 37 38"

               |                                        |
              ptr1                                     ptr2  

ptr1常に左から右へ7番目の位置になります

ptr2右から左に向かって常に13番目の位置になります

出力文字列:

4B 00 00 41 41 2F 41 54 43 43 54 52 31 2E 41 54 31
4

6 に答える 6

5

すでにポインタを持っている場合、これは非常に簡単です。ポインターと長さを取るstd::stringコンストラクターを使用します。

std::string result(ptr1, ptr2 - ptr1);

または、コメントで指摘されているように、ポインターはイテレーターとしても使用できるため、デュアルイテレーターコンストラクターを使用できます。

std::string result(ptr1, ptr2);
于 2012-07-24T17:24:52.290 に答える
4

Cの場合:

char substr[MAX_LEN + 1];

strncpy(substr, input + 6, MAX_LEN);
substr[strlen(substr) - 12] = '\0';

C ++の場合:

substr = input.substr(6, input.size() - (6 + 12));

これにより、入力文字列のエラー処理は行われません。

于 2012-07-24T17:24:56.643 に答える
2

を使用std::stringできる場合は、substrメソッドを使用できます。

于 2012-07-24T17:24:43.070 に答える
1

関数を使用std::string.substrします。この目的のために設計されています。

2つの引数が必要です。1つ目は「抽出」を開始する場所からのインデックスであり、2つ目は「抽出された」文字の数です。

例:

string hello = "Hello World";
string part = hello.substr(6, hello.size() - 6); // part == "World"

したがって、2つのインデックスがiありj、i <= jの場合、からiまでの部分文字列はj

string part = original.substr(i, j - i + 1);
于 2012-07-24T17:25:07.170 に答える
1

Cでは、入力文字列を変更せずに:

char *ptr1,*ptr2;
if(strlen(instring)<13) { /** error; not long enough **/ }
ptr1 = instring+7;
ptr2 = instring+strlen(instring)-13;

ここでのポインタは、入力文字列内の位置を指しているだけです。元の入力文字列を変更せずに変更する必要がある場合は、を使用しますstrncpy

于 2012-07-24T17:26:21.770 に答える
1

私はあなたがあなたのptr1とptr2を後方に持っているか、左/右が混同していると思います。しかし、X位置を右から取得するには、文字列の最後の要素からX番目の位置に到達するまで繰り返し、Xが左からどれだけ離れているかを計算してから、string.substr()を使用します。

http://www.cplusplus.com/reference/string/string/substr/

于 2012-07-24T17:26:28.923 に答える