:: 运算符必须与 tolower() 一起使用吗?

2024-04-09

transform(mystr.begin(), mystr.end(), mystr.begin(), tolower);

我正在使用转换函数使字符串全部小写字母,但即使在编写“using namespace std;”之后在我的程序顶部,我收到一大堆错误(当像上面这样写时)。当我在 tolower 参数之前包含 :: 运算符时(如下所示),我不会。为什么是这样?我认为 tolower 函数位于 std 命名空间中,它会像上面一样工作。

transform(mystr.begin(), mystr.end(), mystr.begin(), ::tolower);

我有以下内容:

#include <iostream>
#include <fstream
#include <sstream>
#include <algorithm>
#include <vector>

在错误消息中我看到:

error: no matching function for call to 'transform(std::basic_string<char>::iterator, ...

然后是参数列表中“tolower”所在的位置

, <unresolved overloaded function type>);'

嗯,这有点复杂。添加#include <cctype>可能会解决你的问题。然而,还有更多事情发生。

有这两个版本tolower:

int std::tolower(int ch);                           // #include <cctype>

template<typename charT>
charT std::tolower(charT ch, const std::locale& loc);    // #include <locale>

但也可能有这个版本:

int ::tolower(int ch);    // #include <cctype> or #include <ctype.h>

因为允许实现注入名称std进入全局命名空间。另外,你不能指望cctype or locale是否包含在内,因为任何标准包含也可能包含任何其他标准包含。


您似乎打算使用以下版本<cctype>。然而,这将是一个错误。如果您检查该版本的文档tolower你会看到参数应该是转换成unsigned char在传递给函数之前。

IOW,通过了charcctype 版本为负值tolower导致未定义的行为。 (尽管常见的实现支持它,因为这是一个常见的错误)。

要更正您的代码并仍然使用 cctype 版本,您可以编写:

#include <cctype>

// ...

transform(mystr.begin(), mystr.end(), mystr.begin(), 
    [](char ch) { return std::tolower( (unsigned char)ch ); } );

虽然使用起来似乎更简单一些:

for (char &ch : mystr)
    ch = std::tolower( (unsigned char)ch );

The <locale>版本看起来像(记住它是一个函数模板):

#include <locale>
#include <functional>

// ...

transform(mystr.begin(), mystr.end(), mystr.begin(), 
    std::bind( std::tolower<char>, std::placeholders::_1, std::locale() ) );

or

std::locale loc;

for ( char &ch : mystr )
    ch = std::tolower(ch, loc);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

:: 运算符必须与 tolower() 一起使用吗? 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • R:序列化文本的 Base64 编码/解码不完全匹配

    in my 上一个问题 https stackoverflow com questions 3114043 r creating a csv out of serialized objects关于使用serialize 创建对象的CSV 我
  • 网站和网络应用程序有什么区别? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我很难自己找出网站和网络应用程序之间的区别 在我看来 网站指向特定页面 而 Web 应用程序更像是内容和信息的某种 门户 但我遇到的问题是 仍然
  • 所有其他 Visual Studio“运行测试”尝试都会导致“无法启动程序 QTAgent32.exe”

    每当我运行测试 然后尝试再次运行测试时 都会收到以下错误 无法对测试运行进行排队 无法启动程序 C Program Files x86 Microsoft Visual Studio 10 0 Common7 IDE QTAgent32 e
  • 不幸的是应用程序已停止工作

    我是 Android 应用程序开发新手 我正在做这个教程应用程序 这是一个非常简单的应用程序 它从计数器中加一并减一 当我在模拟器中运行它时 它说 不幸的是教程已停止工作 代码中没有错误 API 级别是 17 请帮助我 java代码 pub
  • jquery isotope 具有无限滚动和图像预加载器

    我正在使用 jquery 同位素和无限滚动 并且想要使用图像预加载器 我使用的图像预加载器是这样的 图像预加载器 http code google com p img preloader image preloader loader ima
  • 在 Swift 上设置计时器

    我尝试重复执行函数 pepe 我没有收到错误 但它不起作用 这是我的代码 public class MyClass var timer Timer objc func pepe gt String let hola hola return
  • 对 Firebase Auth 帐户的密码实施自定义规则

    当用户创建帐户时 有什么方法可以设置密码的自定义规则吗 Firebase 似乎没有提供编辑密码规则的方法 我知道我可以在前端设置密码规则 但就像弗兰克 范普费伦 https stackoverflow com a 36319652 6516
  • Firefox 在重新加载时保留表单数据

    I have a big problem with the functionality in Firefox that keeps data that the user have filled in on reload F5 If i us
  • 从ini文件中读取数据

    我有一个需要输入文件名的 vbscript 代码是 Dim tsout Set tsout gofs CreateTextFile C csv Dim tsin Set tsin gofs OpenTextFile C csv 我该如何配置
  • Pandas 找到行的子集,在其他列约束下最小化列的总和

    我有一个非常简单的想法 即找到行的子集 使一列的总和最小化 而另一列的总和必须大于某个值 Example df pd DataFrame Names a b c d e f Target 35 15 12 8 7 5 Cost 15 40
  • DB 中的 Twitter 名称长度

    我正在向成员表添加一个字段 用于存储网站上成员的 Twitter 名称 据我所知 twitter 名称的最大长度为 20 因此显然我应该将字段大小设置为 varchar 20 SQL Server 这是一个好主意吗 如果 Twitter 开
  • 无法使用 Terraform 创建 google 项目

    我正在关注Google GKE 和 SQL 与 terraform https medium com mudrii google gke and sql with terraform 294fb84061教程 但我无法创建一个google
  • 如何将 AutoFixture 自定义应用到从基类继承的任何内容?

    为了干燥我的单元测试 我尝试使用 AutoFixture 作为 IoC 容器来实例化我的被测系统 SUT 在本例中是 ASP NET MVCControllers 因此 我想自定义 AutoFixture 以创建没有自动属性的控制器 我尝试
  • 获取 pandas 列中的第一和第二最高值

    我正在使用 pandas 来分析一些选举结果 我有一个 DF 结果 其中每个选区都有一行 代表各个政党 超过 100 个 的选票的列 In 60 Results columns Out 60 Index Constituency Regio
  • 如何在 Ubuntu 中为 Android 设置 Appium

    我是新来的appium 自动化测试技术 我使用的是运行 Ubuntu Linux 的 PC 我已经搜索过这个主题 但没有得到任何有用的教程 谁能指出我正确的文档 不要通过apt get安装nodejs 这需要sudo权限 如果以sudo用户
  • 如何使用 Mock.Of() 模拟没有默认构造函数的类?

    使用起订量 我需要在现有的基础上创建一个假的class 不是接口 有没有默认的ctor 我可以使用 传统 语法来做到这一点 var fakeResponsePacket new Mock
  • 当绑定属性更改时,ListView 分组不会更新

    我正在使用依赖项属性 GroupDescription 根据列表视图项目源的属性对 WPF 列表视图中的项目进行分组 我的问题是 仅当 GroupDescription 值更改时才会更新分组 而不是在列表视图源中项目的绑定属性更改后分组才会
  • iOS 6 中视图控制器的旋转不正确

    在我的应用程序中 我一直在使用现已弃用的 shouldAutoRotateToFace 方法 现在 当使用 iOS 6 模拟器时 当设备处于横向时 我的所有子视图都会旋转到纵向 有谁知道这可能是什么原因造成的 我已经尝试使用supporte
  • 将 Firebase Analytics 添加到 Instant App

    我正在将现有应用程序转换为 Android Instant App 我已经成功地做到了这一点 我的应用程序以即时应用程序形式运行 我现在面临的问题是关于 Firebase Analytics 当我运行即时应用程序时 出现此错误 E Fire
  • :: 运算符必须与 tolower() 一起使用吗?

    transform mystr begin mystr end mystr begin tolower 我正在使用转换函数使字符串全部小写字母 但即使在编写 using namespace std 之后在我的程序顶部 我收到一大堆错误 当像