0

我有一个需要操作的字符串接口(const char* 值,uint32_t 长度)。

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

我建议你先做(2),因为它可能会减少(1)要做的工作。

如果您坚持使用传统的 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 回答