スポンサーリンク

このドキュメントの内容は、以下の通りです。

はじめに

アルファベットには、大文字と小文字が存在します。ソフトウェアで文字列を比較するときに、大文字・小文字を違うものとして扱うか、大文字・小文字を区別せずに比較するなど、いろいろなケースがあります。大文字・小文字を区別せずに比較する場合には、大文字を小文字に変換して、文字をそろえたり、逆に、小文字を大文字に変換してそろえた上で、比較することが多いのではないでしょうか。

日本語だと、全角と半角で、数字でなやんだり、半角カナと全角のカナでの比較に苦しんだりする環境もあるのではないかと思います。

今回は、C++言語で、std::string型の文字列に対して、大文字を小文字に変換する、小文字を大文字に変換する、のやり方をご紹介いたします。std::transformを利用します。

string型の大文字や小文字を変換する方法

C++言語の std::string型の文字列の大文字から小文字へ変換したり、小文字から大文字へ変換するのに、 std::transform が使えます。

char型の文字列の大文字や小文字の変換する方法

C++言語でchar型の文字列は、あまり扱わないとは思いますが、例を掲載します。
C++言語ですが、C言語と同じように tolower() や toupper() を利用して変換できます。

string型の大文字と小文字の変換のサンプルコード

ここでは、std::string の文字列を大文字から小文字へ、小文字から大文字へ変換する例を紹介します。
#include <iostream>
#include <cstdlib>

#include <algorithm>
#include <string>

int
main (int argc, char *argv[])
{
	std::string s("Yahoo Google");

	transform (s.begin(), s.end(), s.begin(), toupper);
	std::cout << s << std::endl;
	transform (s.begin(), s.end(), s.begin(), tolower);
	std::cout << s << std::endl;

	::exit (EXIT_SUCCESS);
}

コンパイル

コンパイル方法は以下の通りです。実行結果は以下の通りです。
$ c++ transform.cc
$ ./a.out
YAHOO GOOGLE
yahoo google

大文字に変換したデータを他のstring型の変数に格納する

前述の例では、変換元のstd::stringと変換後のstd::stringは、同じでした。場合によっては、元のstd::stringを変更したくないということもあるでしょう。別のstd::stringに変換後のデータを格納する場合には、第三引数で別のstd::stringの変数を指定します。ここで重要になってくるのは、データを格納する変数のサイズを確保しておくことです。

resize を利用して、サイズを確保します。変数dのリサイズを行わない場合、下記のプログラムは空行を表示します。
#include <string>
#include <iostream>
#include <algorithm>

int main(int argc, char *argv[]){

	std::string s = "Google";
	std::string d;

	d.resize(s.size());
	std::transform(s.begin(), s.end(), d.begin(), toupper);

	std::cout << d << std::endl;

	return 0;
}

C++でcharの配列の大文字を小文字に変換する場合

大文字を小文字に変換する場合には tolower() を利用します。ループを回して、1文字ずつ変換します。C++言語なのに、まさにC言語ですね。
#include <iostream>
#include <cctype>

int main(int argc, char const* argv[])
{
	char str[] = "Test 2020";
	char *p;

	p = str;
	while(*p) {
		*p = tolower (*p);
		p++;
	}

	std::cout << str << std::endl;

	return 0;
}

コンパイル方法は以下の通りです。
c++ char_array_tolower.cpp

実行方法は以下の通りです。
$ ./a.out
test 2020

C++でcharの配列の小文字を大文字に変換する場合

小文字を大文字に変換する場合には toupper() を利用します。ループを回して、1文字ずつ変換します。C++言語なのに、まさにC言語ですね。
#include <iostream>
#include <cctype>

int main(int argc, char const* argv[])
{
	char str[] = "Test 2020";
	char *p;

	p = str;
	while(*p) {
		*p = toupper (*p);
		p++;
	}

	std::cout << str << std::endl;
	return 0;
}

コンパイル方法は以下の通りです。
c++ char_array_toupper.cpp

実行方法は以下の通りです。
$ ./a.out
TEST 2020

C言語で大文字を小文字、小文字を大文字に変換する方法

C言語であれば、ポインタをぐるぐる回して、 tolower や toupper で、変換可能です。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

void
strlower (const char *s)
{
	char buf[strlen(s) + 1];
	char *p = buf;
	for ( ; *s; s++)
	{
		*p++ = tolower (*s);
	}
	*p = '\0';

	printf ("%s\n", buf);
}


int
main(int argc, char *argv[])
{
	strlower ("Yahoo");
	strlower ("Google");

	exit (EXIT_SUCCESS);
}

C++関連記事

[2007-08-22-1] CppUnitでC++の例外をテストする方法
[2007-08-03-1] vimのオムニ補完でC++をもっと楽にする OmniCppComplete
[2007-04-12-2] boost regex 正規表現マッチ
参照しているページ (サイト内): [2009-09-06-1] [2007-04-12-2]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー