标签: toupper

为什么字母表在此C代码中分为多个范围?

在自定义库中,我看到了一个实现:

inline int is_upper_alpha(char chValue)
{
    if (((chValue >= 'A') && (chValue <= 'I')) ||
        ((chValue >= 'J') && (chValue <= 'R')) ||
        ((chValue >= 'S') && (chValue <= 'Z')))
        return 1;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是复活节彩蛋还是与标准C/C++方法相比有哪些优势?

inline int is_upper_alpha(char chValue)
{
    return ((chValue >= 'A') && (chValue <= 'Z'));
}
Run Code Online (Sandbox Code Playgroud)

c c++ character toupper

161
推荐指数
2
解决办法
6279
查看次数

在调用toupper(),tolower()等之前,是否需要转换为unsigned char?

不久之前,StackOverflow上有一个声誉很高的人在评论中写道,在调用(和类似的函数)之前必须抛出一个char-argument .unsigned charstd::toupper

另一方面,Bjarne Stroustrup没有提到在C++ - Programming Language中这样做的必要性.他只是std::tolower喜欢用

string name = "Niels Stroustrup";

void m3() {
  string s = name.substr(6,10);  // s = "Stroustr up"
  name.replace(0,5,"nicholas");  // name becomes "nicholas Stroustrup"
  name[0] = toupper(name[0]);   // name becomes "Nicholas Stroustrup"
} 
Run Code Online (Sandbox Code Playgroud)

(引用自该书,第4版.)

参考文献说输入需要表示为toupper.对我来说,这听起来像每个unsigned char以后都有,char并且char具有相同的大小.

那么这个演员是不必要的还是Stroustrup不小心?

编辑:libstdc ++手册提到输入字符必须来自基本源字符集,但不会强制转换.我想这是由@Keith Thompson的回复所涵盖的,他们都有积极的表现unsigned charsigned char

c++ undefined-behavior language-lawyer toupper tolower

30
推荐指数
2
解决办法
2841
查看次数

为什么不能"转换(s.begin(),s.end(),s.begin(),tolower)"成功编译?

鉴于代码:

#include <iostream>
#include <cctype>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
     string s("ABCDEFGHIJKL");
     transform(s.begin(),s.end(),s.begin(),tolower);
     cout<<s<<endl;
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

呼叫没有匹配功能 transform(__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, <unresolved overloaded function type>)

什么是"未解决重载函数类型"是什么意思?

如果我用tolower我写的函数替换它,它不再是错误.

c++ compiler-errors lowercase toupper tolower

28
推荐指数
4
解决办法
2万
查看次数

为什么putchar,toupper,tolower等采用int而不是char?

在C中,字符串是char(char *)数组,字符通常存储在其中char.我注意到libC中的一些函数将作为参数整数而不是char.

例如,让我们的职能toupper()tolower()两个使用int.手册页说:

如果c不是无符号字符值或EOF,则这些函数的行为是未定义的.

我的猜测是,有一个int,toupper并且tolower能够处理unsigned charEOF.但实际上EOF是在实践中(有没有关于它的值的规则?)一个可以用a存储的值char,并且由于这些函数不会转换EOF成其他东西,我想知道为什么toupper不简单地将char作为参数.

在任何情况下,为什么我们需要接受不是字符的东西(例如EOF)?有人能为我提供相关的用例吗?

这与fputc或类似putchar,也可以将int其转换为unsigned char无论如何.

我正在寻找这种选择的确切动机.我想说服,我不想回答,我不知道有一天有人问我.

c putchar toupper tolower

15
推荐指数
1
解决办法
2279
查看次数

ToUpperInvariant() - MSDN推荐错误了吗?

.NET Framework中使用字符串的最佳实践中,OrdinalIgnoreCase建议将StringComparison 用于不区分大小写的文件路径.(我们称之为声明A.)

我同意这一点,因为我可以在同一目录中创建两个文件:

é.txt
e?.txt
Run Code Online (Sandbox Code Playgroud)

它们的文件名不一样,第二个是由e和修饰符组成的,所以它实际上有两个字母.(您可以尝试使用复制粘贴.)

如果有不变的文化比较(而不是序数比较),NTFS将不允许这些文件,因为在他们解释的同一篇文章中,在不变的文化中 a + ? = å

但在文章中String.ToUpperInvariant()有不同的建议:(声明B.)

如果需要操作系统标识符的小写或大写版本(例如文件名,命名管道或注册表项),请使用ToLowerInvariant或ToUpperInvariant方法.

我需要创建文件路径集合(实际上HashSet)来检测重复项.因此,如果创建地图的时候,我会服从声明B,我可以误报结束,因为上述文件名é.txte?.txt将被视为一个.我是否正确理解MSDN中的语句B具有误导性?或者我错过了什么?

我即将建立一个库,最好从开始时没有已知的错误,所以我根本不想忽略这一点.

更新:

语句B似乎还有一个问题:ToLowerInvariant()无法实际使用.原因(我引用的最佳实践的文章):DO: Use ToUpperInvariant rather than ToLowerInvariant when normalizing strings for comparison.实际的理由: There is a small range of characters that do not roundtrip, and going to lowercase will make these characters unavailable.()

.net string msdn toupper

11
推荐指数
1
解决办法
230
查看次数

大写字母.R等效于excel"PROPER"功能

同事,

我正在查看类似于以下摘录的数据框:

Month   Provider Items
January CofCom   25
july    CofCom   331
march   vobix    12
May     vobix    0
Run Code Online (Sandbox Code Playgroud)

我想将每个单词的首字母大写,并降低每个单词的剩余字母.这将导致数据框类似于下面的数据框:

Month   Provider Items
January Cofcom   25
July    Cofcom   331
March   Vobix    12
May     Vobix    0
Run Code Online (Sandbox Code Playgroud)

总之,我正在寻找R等同于MS Excel中可用的ROPER功能.

string r capitalization toupper tolower

9
推荐指数
4
解决办法
2万
查看次数

检查字符串的任何字符是否为大写Python

说我有一个字符串.

该字符串可以更改它包含的字符.

例如 word = "UPPER£CASe"

我如何测试字符串以查看字符串中的任何字符是否不是大写的.此字符串必须只包含大写字母,不能包含其他标点符号,数字,小写字母等.

python string python-3.x uppercase toupper

9
推荐指数
2
解决办法
4万
查看次数

如何将字符串设置为全部小写

我有一个 char foo[SIZE]; //(string)

并使用正确输入%s(如printfs正确输入),但现在要将其设置为小写。所以我尝试使用

 if (isupper(*foo)) 
   *foo=tolower(*foo); 
Run Code Online (Sandbox Code Playgroud)

即当我这样做:

printf("%s" foo); //I get the same text with upper case
Run Code Online (Sandbox Code Playgroud)

文字似乎没有改变。谢谢。

c lowercase uppercase toupper tolower

5
推荐指数
2
解决办法
2万
查看次数

从用户输入的数据将字符转换为大写

我正在尝试为酒店创建一个程序,用户输入一个字符(S,D或L),并且该字符应该与下一行的代码相对应.我需要帮助转换用户输入(无论他们输入什么方式)转换为大写,然后我可以使用if语句来做我需要做的事情.到目前为止,我的代码如下:

public static void Main()
{
    int numdays;
    double total = 0.0;
    char roomtype, Continue;

    Console.WriteLine("Welcome to checkout. We hope you enjoyed your stay!");

    do
    {
        Console.Write("Please enter the number of days you stayed: ");
        numdays = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("S = Single, D = Double, L = Luxery");
        Console.Write("Please enter the type of room you stayed in: ");
        roomtype = Convert.ToChar(Console.ReadLine());


     **^Right Her is Where I Want To Convert To Uppercase^**

        total = RoomCharge(numdays,roomtype);
        Console.WriteLine("Thank you for staying at …
Run Code Online (Sandbox Code Playgroud)

c# char uppercase toupper

5
推荐指数
2
解决办法
2万
查看次数

就地转换 string_view

std::transform从 C++20 开始,声明constexpr.我有一堆带std::string参数的字符串实用函数,但很多用法最终只是在编译时传递小而短的字符文字序列。constexpr我想我会利用这个事实并声明 和take s的版本,std::string_view而不是创建临时std::string变量只是为了扔掉它们......

原始STD::STRING版本:

[[nodiscard]] std::string ToUpperCase(std::string string) noexcept {
    std::transform(string.begin(), string.end(), string.begin(), [](unsigned char c) -> unsigned char { return std::toupper(c, std::locale("")); });
    return string;
}
Run Code Online (Sandbox Code Playgroud)

STD::STRING_VIEW版本:

[[nodiscard]] constexpr std::string_view ToUpperCase(std::string_view stringview) noexcept {
    std::transform(stringview.begin(), stringview.end(), stringview.begin(), [](unsigned char c) -> unsigned char { return std::toupper(c, std::locale("")); });
    return stringview;
}
Run Code Online (Sandbox Code Playgroud)

但 MSVC 抱怨道:

error C3892: '_UDest': you cannot assign to a …
Run Code Online (Sandbox Code Playgroud)

c++ toupper tolower string-view c++20

5
推荐指数
1
解决办法
3505
查看次数