将字符串转换为大写但出现错误
convert a string into uppercase but getting error?
我有一个字符串,我需要将其转换为大写。在下面的getCode
方法中,我有一个字符串s
我需要将其转换为大写。
static const Code getCode(std::string const& s)
{
static std::map<std::string, Code> dataHolderMap{{"TEXT", TEXT},
{"XML", XML}};
std::map<std::string, Code>::iterator it = dataHolderMap.find(covertToUpper(s));
if ( it != dataHolderMap.end() )
{
return it->second;
}
return XML;
}
这是我添加的将字符串转换为大写的方法,但我收到编译错误
const char *covertToUpper(char *str)
{
char *newstr, *p;
p = newstr = strdup(str);
while(*p++=toupper(*p));
return newstr;
}
我得到的错误是:
error: no matching function for call
我做错了什么吗?还有转换为大写的最佳方法是什么?通常,我需要将传入的字符串s
转换为大写。
您的代码混合了C++字符串和 C 样式的 char * 字符串。 s.c_str() 可能有效,但在这种情况下无法保证。 convertToUpper(s.c_str()) 将修改 c_str() 返回的数组,C++不保证这将按照您想要的方式运行。下一个问题是将 convertToUpper 返回的 char * 传递给 dataHolderMap.find,它需要一个字符串,而不是一个 char *。
最好将字符串保留为字符串。
除非你需要保留输入字符串s,否则请仔细看看std::transform。如果需要保留 s,请先创建副本,然后在副本上运行转换。
std::transform(s.begin(), s.end(), s.begin(), ::toupper);
将执行您想要的转换并将字符串保留为字符串,以便对 dataHolderMap.find() 的调用获得所需的字符串。
#include <algorithm>
...
std::string uppercase = s;
std::transform(uppercase.begin(), uppercase.end(), uppercase.begin(), ::toupper);
std::map<std::string, Code>::iterator it = dataHolderMap.find(uppercase);
另一种方法是使用 Boost 库代替转换。警告:如果您尚未安装和配置Boost,则它可能是一个非常昂贵的锤子。
#include <boost/algorithm/string.hpp>
...
std::map<std::string, Code>::iterator it = dataHolderMap.find(boost::to_upper_copy(s));
我看到的唯一明显的问题是,您正在将 string
类型的对象传递给采用 char *
类型参数的 convertToUpper()
函数。
您的convertToUpper()
函数应像这样调用:
convertToUpper(s.c_str());
编辑:在您的评论中,您提到您收到一个错误:cannot call member function const char* TestClass::covertToUpper(char*) without object
这意味着您的convertToUpper()
函数位于名为 TestClass
的类中。由于这是一个成员函数,因此您需要有一个实例化的 TestClass
对象来调用您的函数。
出于您的目的,我建议将函数声明更改为:
static const char *convertToUpper(char *str)
从那里你可以这样调用你的convertToUpper()
方法: TestClass::convertToUpper(...)
- 由cin中的字符串中未捕获空白引起的分割错误
- 将 GetLastError() 转换为带有错误字符串的异常
- Rapidjson 解析错误:字符串 (207) 中的编码无效
- 尝试对字符串[数组]>>cin 并出现错误(" "字符串下标超出范围")
- 如何检索 DirectX 9 的错误字符串
- 从 C++ => C 包装的 API(多线程)传输错误字符串
- 错误字符串下标超出c++范围
- 获取Openssl证书错误中的错误字符串
- 作为宏参数的安装类型返回错误:字符串常量之前的预期非限定 id
- 语法错误字符串方法C++
- 对于静态错误字符串,哪个的内存/性能效率更高,或者有替代方案
- 使用 strtok() 的错误字符串比较
- C++ 中的运行时错误字符串声明
- 我收到错误:字符串声明上的 C2501
- GCC:为什么一行代码中的错误(字符串和NULL的比较)会导致一长串错误消息
- 错误C2059:语法错误:'字符串'
- 致命错误:字符串:没有这样的文件或目录编译终止
- C++错误:字符串下标超出范围
- 这里面有什么错误?字符串赋值
- 是否有标准的方法来查询EGL错误字符串