:: 运算符必须与 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() 一起使用吗? 的相关文章

  • 4 x 3 锁图案

    我遇到了这个 它要求计算在 4x3 网格中可以制作特定长度的锁定图案的方式数 并遵循规则 可能有些点不能包含在路径中 有效的模式具有以下属性 图案可以使用第一次接触的点序列来表示 与绘制图案的顺序相同 从 1 1 到 2 2 的图案与图案不
  • 不允许从函数返回函数。我怎么能?

    8 3 5 8 Functions dcl fct says 函数的返回类型不得为 类型数组或function 尽管它们可能具有指针类型的返回类型或对此类事物的引用 为什么规则这么明确 是否有某种语法甚至允许返回函数而不是函数指针 我是否误
  • 如何通过MFC将应用程序设置保存到注册表中?

    我有一个由 MFC 项目向导创建的 MFC 应用程序 我想在注册表中保存 读取应用程序设置 所以问了这个question https stackoverflow com questions 1880275 good c registry w
  • 更改 WinForms 按钮突出显示颜色

    I found 这一页 https stackoverflow com questions 9260303 how to change menu hover color winforms 其中概述了如何更改 MenuStrip 及其项目的呈
  • 何时在定义上下文或实例化点中发生非依赖名称的重载解析?

    3 4 基本 lookup p1 重载解析 13 3 在名称查找成功后发生 void g long void g int int template
  • 为什么仍然需要在 using 语句的 RHS 中使用 typename 来消除依赖类型的歧义?

    我很清楚为什么需要使用typename对于依赖类型 因为编译器在看到类似的内容时可能无法消除类型和变量声明之间的歧义T type 参见例如这个答案 https stackoverflow com a 613132 3093378一个很好的解
  • Windows 控制台中的 C++ 按键输入

    我目前正在开发各种consoleWindows 中的游戏无法通过常规输入真正运行cin 我怎样才能 以简单的方式仅使用 MSVC 中提供的标准 Windows 库 让程序等待 特定 按键并返回按键 ID 它必须适用于包括箭头键在内的所有按键
  • 当 TestCase 包含数组时,NUnit 无法识别该 TestCase

    这是我在 NUnit 中遇到的非常简单但烦人的行为 我有一些这样的测试 Test TestCase 1 2 hello TestCase 3 5 goodbye public void MyClass MyMethod int a int
  • 如何在 ASP.NET 5/vNext/Core 中使用 Elmah?

    我对如何在 ASP NET 5 MVC 6 项目中使用 Elmah 有点困惑 我从 nuget 得到了包 它添加了 Elmah Mvc 2 1 2 到project json 中的依赖项 我不知道从这里到哪里去 以前 nuget 会向 we
  • 如何使用 PowerShell 使用 C# DLL 中存在的类的 New-Object

    例如 我有一个 C 类 public class MyComputer PSObject public string UserName get return userName set userName value private strin
  • 单击按钮本地化应用程序

    我在我的项目 mainMaster 页面中找到了 imageButtons
  • 如何获得字符串的所有字谜

    我试图找到一个字符串的所有可能的字谜并仅使用递归将它们存储在数组中 我被困住了 这就是我所拥有的一切 int main const int MAX 10 string a ABCD string arr 10 permute arr a 0
  • 无效的跨线程访问问题

    我有两个 ViewModel 类 PersonViewModel 和 PersonSearchListViewModel PersonViewModel 实现的字段之一是通过 WCF 下载的个人资料图像 本地缓存在独立存储中 PersonS
  • 如何在 MSBuild NuGet 包生成的 .nuspec 中注入自定义依赖项

    我正在尝试迁移到使用 MSBuildPack支持使用 csproj 生成项目 NuGet 包 其中在开发过程中使用本地 dll 来构建项目 但在使用 MSBuild 打包 项目时需要替换 交换它们以引用生成的 nuspec 中的外部 NuG
  • 最佳实践:从属性中抛出异常

    什么时候适合从属性 getter 或 setter 中抛出异常 什么时候不合适呢 为什么 关于这个主题的外部文档的链接会很有帮助 谷歌搜索结果出奇的少 Microsoft 在以下位置提供了有关如何设计属性的建议 http msdn micr
  • 如何使用 Xamarin 应用程序开发自动注销

    我必须在 App xaml cs 上添加功能才能使其正常工作 我在 OnStart 上添加了功能 但现在它会间歇性地一次又一次地将我从应用程序中注销 根据下面的代码 我需要做什么才能让它停止这样做 或者我的代码有问题 这是我最新的代码 na
  • C# 中 WinForm TextBox 中数字的按键事件

    我想限制用户在文本框中仅输入数字 我在按键事件中添加此代码 private void txtPartID KeyPress object sender KeyPressEventArgs e if e KeyChar gt 0 e KeyC
  • 在源代码和预编译二进制文件之间切换

    我们的应用程序中有大量的库 库是用 C 或 C 编写的 平台 net Framework Windows 64 位 将所有内容编译为源代码需要花费大量时间 我们正在考虑切换到预构建的二进制文件 但我们仍然希望保留返回源代码的可能性 作为版本
  • WCF - IsOneway 的行为不像 Oneway 操作

    我已在服务的某些方法上定义了 OneWay 属性 但它们的行为并不像 Oneway 调用 我的客户等待呼叫完成并从服务返回 我假设单向操作是非阻塞操作 并且客户端不关心被调用函数会发生什么 它只是调用并忘记它 这是对的吗 问题 调用 Ope
  • Bazel:为 cc_binary/cc_test 设置运行时环境变量和配置文件位置

    我正在尝试在 Linux 上的 C 应用程序中使用 odbc 以下构建文件用于将库作为外部依赖项包含在内 licenses notice cc library name lib srcs lib libodbc so lib64 libod

随机推荐

  • 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 之后在我的程序顶部 我收到一大堆错误 当像