私は文字列を持っています: "apple"
. 最初の文字だけを大文字に変換し、新しい文字列を次の形式で取得するにはどうすればよい"Apple"
ですか?
マルチバイト文字を含む文字列を使用することもできます。
文字列の最初の文字がマルチバイト文字の場合は?
string str = "something";
str[0] = toupper(str[0]);
それはあなたがする必要があるすべてです。C文字列でも機能します。
カーネギーが言ったように、
string str = "something";
str[0] = toupper(str[0]);
ただし、次のことも忘れないでください。
#include <string>
#include <cctype>
すべての方法まで
マルチバイト文字を含む文字列を使用できるため、str[0] は使用できません
非 ASCII 文字の分類と変換をサポートする CRT 実装を知りません。Unicode をサポートしたい場合、「最初の文字を大文字に変換する」ことは他の言語では意味がない可能性があるため、すべてがはるかに複雑になります。これには、専門家によって作成されたUnicode ライブラリを使用する必要があります。
それがいかに複雑かを説明するために、英語で次のケースを考えてみましょう。3 つのコード ポイント シーケンス 'file' (ファイル付き) を変換すると、最初のコードポイントが2 つの別個の文字に分割され、'File' になります。大文字と小文字の分類と変換を行うための標準の C/C++ インターフェイスは、そのようなケースを考慮していないことに注意してください。そのため、Unicode を正しくサポートするためにそれらを実装することさえ不可能です。
#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;
}
}
}
(「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;