我有一个需要操作的字符串接口(const char* 值,uint32_t 长度)。
1)我必须全部小写
2)我必须删除在';'之后找到的所有字符 分号
谁能帮我指出任何可以做到这一点的 C/C++ 库?无需我遍历 char 数组。
提前致谢
我有一个需要操作的字符串接口(const char* 值,uint32_t 长度)。
1)我必须全部小写
2)我必须删除在';'之后找到的所有字符 分号
谁能帮我指出任何可以做到这一点的 C/C++ 库?无需我遍历 char 数组。
提前致谢
1)
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
2)
str = str.substr(0, str.find(";"));
见这里: 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
我建议你先做(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"