将德语字母转换为大写字母无效
Converting German Letters to Uppercase won't work
这段代码有什么问题?如果字符串中有一个字母,如 å
、ä
或 ö
,它不会像我想要的那样使它们变成大写。有什么我想念的吗?
在 C++ 中是否有任何方法可以通过库以某种方式将德语字母转换为大写?
string makeUpperCase(string c)
{
transform(c.begin(), c.end(), c.begin(), ::toupper);
while(c.find("Ä") != string::npos)
{
c.replace(c.find("Ä"), 2, "ä");
}
while(c.find("Å") != string::npos)
{
c.replace(c.find("Å"), 2, "å");
}
while(c.find("Ö") != string::npos)
{
c.replace(c.find("Ö"), 2, "ö");
}
return c;
}
您正在搜索 大写 字母并将其替换为 小写 字母。
如果你想把字母变成大写,你必须做相反的事情。
string makeUpperCase(string c)
{
transform(c.begin(), c.end(), c.begin(), ::toupper);
while(c.find("ä") != string::npos)
{
c.replace(c.find("ä"), 2, "Ä");
}
while(c.find("å") != string::npos)
{
c.replace(c.find("å"), 2, "Å");
}
while(c.find("ö") != string::npos)
{
c.replace(c.find("ö"), 2, "Ö");
}
return c;
}
在很多平台上,函数toupper
也可以处理德文字符。但是,在默认的 "C"
语言环境中,它只将字符 a
到 z
和 A
到 Z
视为字母。因此,您必须将语言环境更改为德语,以便该函数也将德语字母视为有效的字母。您可以使用函数 std::setlocale
.
来做到这一点
ISO C 标准未指定哪些语言环境可用以及它们的名称是什么。但是,在 Microsoft Windows 上使用 Microsoft Visual Studio,你可以写
std::setlocale( LC_ALL, "de-DE" );
将区域设置设置为德语。
这是一个示例程序:
#include <iostream>
#include <algorithm>
#include <string>
#include <cctype>
#include <clocale>
int main( void )
{
//define text string with German-specific characters
std::string str{ "This is a test string with ä, ö and ü." };
//set the locale to German
std::setlocale( LC_ALL, "de-DE" );
//convert string to upper-case
std::transform( str.begin(), str.end(), str.begin(), static_cast<int(*)(int)>(std::toupper) );
//output converted string
std::cout << str << '\n';
}
该程序在该平台上具有以下输出:
THIS IS A TEST STRING WITH Ä, Ö AND Ü.
如您所见,德文字母也已制作 upper-case。
要在 Linux 上将语言环境设置为德语,请参阅 the Linux documentation for setlocale
。
这段代码有什么问题?如果字符串中有一个字母,如 å
、ä
或 ö
,它不会像我想要的那样使它们变成大写。有什么我想念的吗?
在 C++ 中是否有任何方法可以通过库以某种方式将德语字母转换为大写?
string makeUpperCase(string c)
{
transform(c.begin(), c.end(), c.begin(), ::toupper);
while(c.find("Ä") != string::npos)
{
c.replace(c.find("Ä"), 2, "ä");
}
while(c.find("Å") != string::npos)
{
c.replace(c.find("Å"), 2, "å");
}
while(c.find("Ö") != string::npos)
{
c.replace(c.find("Ö"), 2, "ö");
}
return c;
}
您正在搜索 大写 字母并将其替换为 小写 字母。
如果你想把字母变成大写,你必须做相反的事情。
string makeUpperCase(string c)
{
transform(c.begin(), c.end(), c.begin(), ::toupper);
while(c.find("ä") != string::npos)
{
c.replace(c.find("ä"), 2, "Ä");
}
while(c.find("å") != string::npos)
{
c.replace(c.find("å"), 2, "Å");
}
while(c.find("ö") != string::npos)
{
c.replace(c.find("ö"), 2, "Ö");
}
return c;
}
在很多平台上,函数toupper
也可以处理德文字符。但是,在默认的 "C"
语言环境中,它只将字符 a
到 z
和 A
到 Z
视为字母。因此,您必须将语言环境更改为德语,以便该函数也将德语字母视为有效的字母。您可以使用函数 std::setlocale
.
ISO C 标准未指定哪些语言环境可用以及它们的名称是什么。但是,在 Microsoft Windows 上使用 Microsoft Visual Studio,你可以写
std::setlocale( LC_ALL, "de-DE" );
将区域设置设置为德语。
这是一个示例程序:
#include <iostream>
#include <algorithm>
#include <string>
#include <cctype>
#include <clocale>
int main( void )
{
//define text string with German-specific characters
std::string str{ "This is a test string with ä, ö and ü." };
//set the locale to German
std::setlocale( LC_ALL, "de-DE" );
//convert string to upper-case
std::transform( str.begin(), str.end(), str.begin(), static_cast<int(*)(int)>(std::toupper) );
//output converted string
std::cout << str << '\n';
}
该程序在该平台上具有以下输出:
THIS IS A TEST STRING WITH Ä, Ö AND Ü.
如您所见,德文字母也已制作 upper-case。
要在 Linux 上将语言环境设置为德语,请参阅 the Linux documentation for setlocale
。