gpt4 book ai didi

c++ - 函数 isalnum() : unexpected results

转载 作者:行者123 更新时间:2023-11-28 07:01:38 28 4
gpt4 key购买 nike

对于赋值,我使用 std::isalnum 来确定输入是字母还是数字。任务的重点是创建一个“字典”。它在小段落上效果很好,但在文本页面上却很糟糕。这是我正在使用的代码片段。

 custom::String string;

std::cin >> string;

custom::String original = string;
size_t size = string.Size();
char j;
size_t i = 0;
size_t beg = 0;

while( i < size)
{

j = string[i];

if(!!std::isalnum(static_cast<unsignedchar>(j)))
{
--size;
}

if( std::isalnum( j ) )
{
string[i-beg] = tolower(j);
}

++i;

}//end while

string.SetSize(size - beg, '\0');

最佳答案

我写这篇文章时呈现的代码整体上没有意义。

但是,如图所示,对 isalnum 的调用仅适用于纯 ASCII,因为

  • C 字符分类函数需要非负参数,或者 EOF 作为参数,并且

为了处理国际字符,

  • 每个字符的编码必须是单字节的,并且

  • setlocale 应该在使用函数之前调用。

关于这三点中的第一点,你可以像这样包装std::isalnum:

using Byte = unsigned char;

auto is_alphanumeric( char const ch )
-> bool
{ return !!std::isalnum( static_cast<Byte>( ch ) ); }

!! 只是为了消除来自 Visual C++ 的愚蠢警告(关于“性能”的警告)。

免责声明:代码未经编译器处理。


附录:如果您没有 C++11 编译器,而只有 C++03,

typedef unsigned char Byte;

bool is_alphanumeric( char const ch )
{
return !!std::isalnum( static_cast<Byte>( ch ) );
}

正如 Bjarne 所说,C++11 感觉就像一门全新的语言! ;-)

关于c++ - 函数 isalnum() : unexpected results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22394351/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com