- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我对编程还很陌生,只是想知道为什么这段代码:
for ( ; *p; ++p) *p = tolower(*p);
当 p 指向一个字符串时,可以降低 c 中字符串的大小写吗?
最佳答案
一般来说,这段代码:
for ( ; *p; ++p) *p = tolower(*p);
不会
” works to lower a string case in c, when p points to a string?
它确实适用于纯 ASCII,但由于 char
通常是有符号类型,并且由于 tolower
需要非负参数(特殊值 除外EOF
),该片段通常会有未定义的行为。
为避免这种情况,将参数转换为 unsigned char
,如下所示:
for ( ; *p; ++p) *p = tolower( (unsigned char)*p );
现在它可以用于像 Latin-1 这样的单字节编码,前提是您通过 setlocale
设置了正确的语言环境,例如setlocale( LC_ALL, "");
。但是,请注意,非常常见的 UTF-8 编码不是每个字符一个字节。要处理 UTF-8 文本,您可以将其转换为宽字符串并将其小写。
详细信息:
*p
是一个表达式,表示 p
指向的对象,大概是一个 char
。
作为 for
循环的继续条件,*p
表示的任何非零 char
值都有效的逻辑 True,而字符串末尾的零 char
值具有逻辑 False 的效果,结束循环。
++p
将指针前进到指向下一个 char
。
关于c - "for ( ; *p;++p) *p = tolower(*p);"在 c 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30660401/
这个问题在这里已经有了答案: What does the "::" mean in "::tolower"? (4 个答案) 关闭 7 年前。 我有 using namespace std; vec
两者有什么区别?我应该什么时候使用它们? 最佳答案 没有。 string.ToLower 在幕后调用 TextInfo.ToLower。 来自 String.cs: // Creates a
根据标题,您使用什么字符串比较实践,为什么? 最佳答案 您没有指定平台,但我猜是 .NET。我强烈建议您使用后一种形式——因为案例比较并不像您预期的那么简单。 (它也避免了创建额外的字符串,但这是
这是我尝试在无法更改的文件的字符向量上运行tolower()时收到的错误(至少,不是手动-太大)。 Error in tolower(m) : invalid multibyte string X É
我的 tolower 功能有问题。尝试将其与 argv 一起使用,但输出为 $0@。我的代码有什么问题吗? #include #include void makeLower(char *s) {
这个问题在这里已经有了答案: what is the meaning of (*(int (*)())a)()? (3 个答案) 关闭 4 年前。 我正在阅读这个答案:https://stackov
我正在编写一个程序,要求输入字母并根据输入对字母和出现次数进行排序。我在代码的末尾,正在尝试将大写字母转换为小写字母。我正在尝试这样做: cout ( std::tolower( 'A' + i )
这是我的示例代码: #include #include #include void convert(char *a, char *b) { int i; for(i=0; i
下面的代码片段用于将字符串转换为小写。 int main() { unsigned char s[] = "AbS.d_"; tolower(s); printf("%s\n"
List expectedResult = new List { "article i", "article ii", "article iii" }; string result = Seleni
所以我试图做的是让这个程序在输入时忽略用户的字母大小写。我看到了如何使用 .ToLower();但是我不明白如何以正确的方式做到这一点。 这是我现在拥有的,我接近了吗?我在网上阅读了很多教程,但它们大
我只是在寻找这两种方法产生不同结果的任何例子。首先,我访问msdn page , 并从中运行代码并稍作更改 using System; using System.Globalization; usin
当我像这样使用 odata 时:$filter=startswith(tolower(firstName),tolower('A'))它不起作用。 我想知道tolower和toupper是否可以和st
当我像这样使用 odata 时:$filter=startswith(tolower(firstName),tolower('A'))它不起作用。 我想知道tolower和toupper是否可以和st
我读过当在您的应用程序中进行大量字符串比较并使用 ToLower 方法时,此方法的成本非常高。我想知道任何人都可以向我解释它是多么昂贵。将不胜感激任何信息或解释。谢谢! 最佳答案 另见 writing
这个问题已经有答案了: Why do I get a segmentation fault when writing to a "char *s" initialized with a string
我目前是一名学习编码的学生。我们的作业要求我们做一个猜数字的游戏。讲师给出了一份需要填写的大纲,以帮助我们完成该项目。 运行此程序时,它只接受一次猜测,并打印四次答案为“@”,并且针对所选游戏的数量执
有没有办法让 C# 编译器在方法内部使用 ToLower()(或任何其他操作方法调用)之前自动将其应用于特定方法参数? //附加信息:它的目的是使用带有不区分大小写键的字典。显然,我的第一种方法是完全
这就是问题所在,我的程序没有将大写字母更改为小写字母。我不明白为什么不。 #include #include using namespace std; int main(){ string
我在实现 for_each 的使用时遇到了问题,我可以使用 for 循环完成工作,但是为了便于理解,我需要一些帮助来解释...到目前为止,我有以下功能...... void clean_entry(c
我是一名优秀的程序员,十分优秀!