【问题标题】:Simple transform tolower not working简单的变换下不工作
【发布时间】:2013-02-24 02:00:58
【问题描述】:

所以我看到了很多类似的问题,但没有一个答案能解决我的问题。有人可以解释为什么这段代码:

string LinkedListByName::toLower(string stringToConvert){

return std::transform(stringToConvert.begin(), stringToConvert.end(), stringToConvert.begin(), ::tolower); }

给我这个错误:

conversion from `__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' to non-scalar type `std::string' requested

在项目中,我需要将很多字符串转换为低级字符串,而不是升压。我从字面上复制并粘贴了以前运行它的项目中的代码。

另外头文件包括以下内容:

#include <vector>
using namespace std;
#include <iostream>
using namespace std;
#include <string>
using namespace std;
#include <algorithm>
#include "Node.h"
namespace model {

【问题讨论】:

  • using namespace std; 几乎在任何时候都是一个坏主意,但这肯定是我第一次看到它连续使用 3 次......

标签: c++ tolower


【解决方案1】:

您的方法应该返回字符串,但您尝试从 std::transform 返回迭代器。改成这样:

string LinkedListByName::toLower(string stringToConvert){
    std::transform(stringToConvert.begin(), stringToConvert.end(), stringToConvert.begin(), ::tolower); 
    return stringToConvert;
}

【讨论】:

  • 哇。出于某种原因,我对它返回一个字符串的想法感到困惑,但它并不仅仅作用于它。无论哪种方式,这都有效,非常感谢。
  • 你需要复制多少次string?也许通过引用传递它而不返回任何东西会更好。
  • “更好”是一个非常主观的术语,我怀疑我们可以决定什么对 Nood 更好。尤其是当我们的信息量如此之少时。
  • @Slava:这就是我限定它的原因。
  • 在很多情况下可能不会更好。例如,在当前形式中,它可以用作一元变换函数,并且可以应用于某些算法,其中带参考的变体不能,或者效率较低。
猜你喜欢
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 2016-08-21
  • 2012-02-10
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多