0

操作する必要のある文字列インターフェイス(const char * value、uint32_t length)があります。

1)すべて小文字にする必要があります

2)「;」の後にあるすべての文字を削除する必要があります セミコロン

誰かがこれを行うことができるC/C ++ライブラリを私に指摘するのを手伝ってもらえますか?char配列を反復処理する必要はありません。

前もって感謝します

4

3 に答える 3

3

1)

std::transform(str.begin(), str.end(), str.begin(), ::tolower);

2)

str = str.substr(0, str.find(";"));
于 2012-07-13T10:18:47.020 に答える
2

ここを参照してください: http: //ideone.com/fwJx5

#include <string>
#include <iostream>
#include <algorithm>

std::string interface(const char* value, uint32_t length)
{
    std::string s(value, length);
    std::transform(s.begin(), s.end(), s.begin(), [] (char ch) { return std::tolower(ch); });
    return s.substr(0, s.find(";"));
}

int main()
{
     std::cout << interface("Test Case Number 1; ignored text", 32) << '\n';
}

出力:

test case number 1
于 2012-07-13T10:30:50.557 に答える
1

(1)実行する作業が少なくなる可能性があるため、最初に(2)実行することをお勧めします。

従来のC関数を使用している場合はstrchr()、最初の';'を見つけるために使用できます。そして、それを'\ 0'(文字列が可変の場合)に置き換えるか、ポインタ演算を使用して別のバッファにコピーします。

tolower()ASCII(ASCIIを使用していると想定しています)を小文字に変換するために使用できますが、これを行うには、残りのループを反復処理する必要があります。

例えば:

const char* str = "HELLO;WORLD";

// Make a mutable string - you might not need to do this
int strLen = strlen( str );
char mStr[ strLen + 1];
strncpy( mStr, str, strLen );

cout << mStr << endl; // Prints "HELLO;WORLD"

// Get rid of the ';' onwards.
char* e = strchr( mStr, ';' );
*e = '\0';

cout << mStr << endl; // Prints "HELLO"

for ( char* p = mStr; p != e; *p = tolower(*p), p++ );

cout << mStr << endl; // Prints "hello"
于 2012-07-13T10:22:41.707 に答える