文字列"Apple"
があります。最初の文字のみを大文字に変換し、"Apple"
の形式で新しい文字列を取得するにはどうすればよいですか?
マルチバイト文字を含む文字列を使用することもできます。
文字列の最初の文字がマルチバイト文字の場合はどうなりますか?
string str = "something";
str[0] = toupper(str[0]);
あなたがする必要があるのはそれだけです。 C文字列でも機能します。
Str [0]を使用できないのは、マルチバイト文字を含む文字列を使用できるためです
非ASCII文字の分類と変換をサポートするCRT実装を知りません。 Unicodeをサポートする場合、「最初の文字を大文字に変換する」ことは他の言語では意味がないため、すべてがはるかに複雑になります。このために専門家によって書かれた nicodeライブラリ を使用する必要があります。
それがどれほど複雑かを説明するために、Englishの次のケースを考えてみましょう。 threeコードポイントシーケンス「ファイル」(fi合字)の変換は、break最初のコードポイントがtwoの個別の文字になり、「ファイル」になります。ケースの分類と変換を行うための標準C/C++インターフェイスでは、このようなケースは考慮されないため、Unicodeを正しくサポートするように実装することさえできないことに注意してください。
カーネイギーが言ったことのように、
string str = "something";
str[0] = toupper(str[0]);
ただし、次のことも忘れないでください。
#include <string>
#include <cctype>
すべての方法まで
(「ASCII」文字でのみ機能します。)
std::wstring s = L"Apple";
if(islower(s.at(0) <= 'z' ? s.at(0) : 'A'))
s[0] += 'A' - 'a';
または、あなたが空想を感じていて、あなたのコードの将来の読者を拷問したい場合:
std::wstringstream wss;
wss << std::uppercase << s[0]
<< std::nouppercase << s.substr(1);
wss >> s;
#include <iostream>
using namespace std;
void capitalize (string &s)
{
bool cap = true;
for(unsigned int i = 0; i <= s.length(); i++)
{
if (isalpha(s[i]) && cap == true)
{
s[i] = toupper(s[i]);
cap = false;
}
else if (isspace(s[i]))
{
cap = true;
}
}
}