「Char」を含む日記 RSS

はてなキーワード: Charとは

2019-07-03

anond:20190703172738

こりゃあたちの悪い書き方を知らんからカプセル化のありがたみがわかんないんだよなきっと

環境C#とかで、人物一人分の情報クラスを作る気があって、Personには体重とか身長とかがあって、みたいなわりときちんとした理屈があればああそれはね、それぞれプロパティにしとけば大丈夫、なんてので大丈夫

地獄はこうだ。

char Person[200];
/* 0から19までを名字に使います */
/* 20から38までを名前に使います */
/* 39は年号コードです 0: 明治、 */
/* 40は生年です */
/* ... */

そしてソースコードの中にいきなり現れる

Person[70] = 35; 

なにやってんだこれー!わかんねえぞこれー!

こういうことがないように、カプセル化するんだ。

2019-02-04

anond:20190204052226

しろなぜChar siuという英語でも中国語でも日本語でもない表記が通じると思った

anond:20190202200308

そのメニューチャーシューことなChar siuで通じそうだけど。

そもそもroastしてるんだっけ?

2018-12-24

anond:20181224075038

ほい。ごく簡単アニメーションを付けてみた


#include "stdafx.h"
#include <string.h>

int main()
{
	char buffer[47];

	strcpy(buffer, "%0sHelloWorld\n");

	for (int i = 0; true; i++)
	{
		int c = i % 16 ;
		if (c % 8 == c) {
			buffer[1] = '0' + c;
		}
		else {
			buffer[1] = '0' + 8 - (c-8);
		}
		

		printf(buffer," ");


	}

    return 0;
}

UTF8ってunsigned charで良いんだっけ?問題

https://qiita.com/yumetodo/items/54e1a8230dbf513ea85b]

から出発したこの話。あちこち議論されているようですな。

https://b.hatena.ne.jp/entry/s/qiita.com/yumetodo/items/54e1a8230dbf513ea85b]

https://togetter.com/li/1301253]

https://naruse.hateblo.jp/entry/2018/12/24/013446]

文字コードを多少かじった人間としては、また人類文字コードで混乱している。と思っていて議論が深まるのかなと思ったりします。

ただ、この話、見ててもやもやする所が一つありまして、UTF-8の1コードポイント=uint8_t=unsigned charでええんかいな。という点です。

文字コードを少しでも知っている人はUTF-8は1つのコードポイントを可変長のバイト列で表します。

よく言われるようにASCIIは1バイト、大体のCJKV文字は3バイト以上で表します((久々にWikipediaUTF-8見たら、UTF-8サロゲートペアってあるんだねー。罪深いわOrale〜))。最大6バイトで1つのコードポイントを表します。

まりですね、char16_tとかchar32_tとかがUTF-16UTF-32マッピングされるのは分かるんですよ。サロゲートペアは脇に置いておいて、コードポイントを表すのにはこの型(っつーか、データ長)を使うよってのが分かるので。

サロゲートペアを考えたときのUTF16も同じ考え方になるんですけど、UTF-8みたいな可変長のバイト長を取るエンコード方式は、結局、1「文字」を表す型(データ長)が定まらないんですよ。

char8_tをunsigned charの子クラスにしたとしてもそれって、UTF-8にとっては「1文字を表す型」ではないんですよ。「1文字を表すバイト列の単位の1つ」でしかないんですよ。(サロゲートペア考慮したときchar16_tも同様)。

意味論で言っちゃえばUTF-32に対してchar8_tを使っても意味は同じになるんですよ。UTF-32って8ビット×4で構成されるだけなんで。

なので、UTF-8で表される1文字を型で使いたかったらuint64_tの子クラス(本当は最大6バイトなので48でいいんだけど)にしなきゃダメなんじゃねぇの?もしくは最少8ビットで48ビット保証する型。とC++界隈ではない自分は思うわけです。

つーか、可変長文字って示すフラグになる型を作った方がまだマシじゃないのと思うのです。

2018-12-23

anond:20181223205616

ほいよ

	char format[50];
	strcpy(format, "%0s%s");
	for (int i = 0; i < 8; i++) {
		printf(format,"","Hello world\n" );
		format[1]++;
	}

スペース増田なら こんなかんじか?

anond:20181223184745

この辺になってくると初心者の人は面倒かな?

解説をつければかなりわかりやす

基本的な書き方


class mystring
{
public:
	char *buffer;
	mystring() 
	{
		buffer = (char*)"";
	}

	void operator = (const char*t)
	{
		int len = strlen(t);
		buffer = new char[len + 47];
		strcpy(buffer, t);
	}

	void operator = (const mystring&src)
	{
		int len = strlen(src.buffer);
		buffer = new char[len + 47];
		strcpy(buffer, src.buffer);
	}

	mystring& operator + (const char*t)
	{
		int len = strlen(buffer);
		int len2 = strlen(t);
		char *buffer2 = new char[len + len2 + 47];
		strcpy(buffer2, buffer);
		strcpy(buffer2+len, t);
		buffer = buffer2;
		return *this;
	}
	mystring&  operator + (const mystring&src)
	{
		return ((*this) + src.buffer);
	}

};


STL化したもの

class mystringV
{
public:
	std::vector<char> buffer;
	mystringV()
	{
		buffer.resize(2);
		buffer[0] = ' ';
		buffer[1] = NULL;
	}

	void operator = (const char*t)
	{
		int len = strlen(t);
		buffer.resize(len+1);
		strcpy(&buffer.at(0), t);
	}

	void operator = (const mystringV&src)
	{
		buffer = src.buffer;
	}

	mystringV& operator + (const char*t)
	{
		int len = strlen(&buffer.at(0));
		int len2 = strlen(t);

		buffer.resize(len + len2 + 47);

		strcpy(&buffer.at(0) + len, t);

		return *this;
	}
	mystringV&  operator + (const mystringV&src)
	{
		return ((*this) + &src.buffer.at(0));
	}

};

考察

様々な話はあるものSTLの方を使えば

いろんな事をプログラマにかわってライブラリがやってしまうということ

どうなんだろうね。

この辺は あまりしっかり おしえてもらえないところではある。

でも プロならみんな 知っている

anond:20181223183225

初心者

class mystring
{
public:
	char *buffer;
	mystring() 
	{
		buffer = (char*)"";
	}

	void operator = (const char*t)
	{
		int len = strlen(t);
		buffer = new char[len + 47];
		strcpy(buffer, t);
	}

	void operator = (const mystring&src)
	{
		int len = strlen(src.buffer);
		buffer = new char[len + 47];
		strcpy(buffer, src.buffer);
	}

	mystring& operator + (const char*t)
	{
		int len = strlen(buffer);
		int len2 = strlen(t);
		char *buffer2 = new char[len + len2 + 47];
		strcpy(buffer2, buffer);
		strcpy(buffer2+len, t);
		buffer = buffer2;
		return *this;
	}
	mystring&  operator + (const mystring&src)
	{
		return ((*this) + src.buffer);
	}

};

	mystring my_space_org;
	for (int i = 0; i < 8; i++) {
		mystring space;
		space = my_space_org + " ";
		printf("%sHello world\n", space.buffer);
		my_space_org = space;
	}

anond:20181223182722

一気に並べてみる

オーソドックスな書きかた

int i;
int space;
for (int i = 0; i < 8; i++)
{
	for (space = 0; space < i; space++)
	{
		printf(" ");
	}
	printf("Hello world\n");

}

すまん <は半角の<に置き換えてくれ(w)

バッファをつかってループを1つ削る

	int i;
	int space;
	char buffer[8];
	char buffer2[8];
	memset(buffer, 0, 8);
	memset(buffer2, 0, 8);
	for (int i = 0; i < 8; i++)
	{
		memset(buffer, 0x20, i);
		printf("%sHello world\n",buffer);

	}

memsetも削ってみる

	int i;
	int space;
	char buffer[8];
	char buffer2[8];
	memset(buffer, 0, 8);
	memset(buffer2, 0, 8);
	for (int i = 0; i < 8; i++)
	{
		buffer[i] = 0x20;
		printf("%sHello world\n",buffer);

	}

この場合特に影響はないが一般的にはmemsetを使う使わないは大きな影響になるので

memsetを削る場合は注意が必要

C++を使ってみる

	std::string space;
	for (int i = 0; i < 8; i++) {
		printf("%sHello world\n", space.c_str());
		space += " ";
	}

C++を使ってみるの別回答

	std::string space_org;
	for (int i = 0; i < 8; i++) {
		std::string space = space_org + " ";
		printf("%sHello world\n", space.c_str());
		space_org = space;
	}

考察

ざつにかんがえても 書き方いろいろ 

それぞれメリット デメリットが有る

まり まぁ どれがいいというよりは

状況に応じてかき分けていく必要がある

学校の授業などだと

アルゴリズムの話で

ヒープソート マージソート クイックソート比較みたいな話があるけど

そこまで難しい話にいかなくても

ハローワールドだけ見てかつ雑に考えてもこのぐらいは

書き方がたくさんある

どれを書くか?どれがいいか? 考えると面白い

anond:20181223152531

技としてはナイスだけど応用は厳しいよね

	const char *message = "        Hello world\n";

	for (int i = 0; i < 8; i++) {
		printf("%s", message + 8 - i);
	}

サンプルとしては、使いにくい書き方

ハローワールドループだけでも

結構遊べる

あなたは どんな 書き方が好き?

ゼロページ

	struct alignas(1) sample{
		char buffer[8];
		char buffer2[8];
	};
	sample sample;
	int i;
	int space;
	memset(sample.buffer, 0, 8);
	memset(sample.buffer2, 0, 8);
	for (int i = 0; i < 8; i++)
	{
		sample.buffer[i] = 0x20;
		printf("%sHello world\n", sample.buffer);

	}

anond:20181223150830

3つともおなじ

int i;
int space;
for (int i = 0; i < 8; i++)
{
	for (space = 0; space < i; space++)
	{
		printf(" ");
	}
	printf("Hello world\n");

}

すまん <は半角の<に置き換えてくれ(w)

	int i;
	int space;
	char buffer[8];
	char buffer2[8];
	memset(buffer, 0, 8);
	memset(buffer2, 0, 8);
	for (int i = 0; i < 8; i++)
	{
		memset(buffer, 0x20, i);
		printf("%sHello world\n",buffer);

	}
	int i;
	int space;
	char buffer[8];
	char buffer2[8];
	memset(buffer, 0, 8);
	memset(buffer2, 0, 8);
	for (int i = 0; i < 8; i++)
	{
		buffer[i] = 0x20;
		printf("%sHello world\n",buffer);

	}

書き直すごとにアルゴリズムちょっとづつ良くなったり悪くなったり

どれがすき?

anond:20181223150251

	int i;
	int space;
	char buffer[8];
	char buffer2[8];
	memset(buffer, 0, 8);
	memset(buffer2, 0, 8);
	for (int i = 0; i < 8; i++)
	{
		memset(buffer, 0x20, i);
		printf("%sHello world\n",buffer);

	}

2018-08-10

anond:20180810150011

一応そこは汲んでやろうや。

地図データを考えるとき朝鮮半島日本列島の間にある空間には町もなければ人もいない、土地もない空白の地点であるとされている訳だけれども、

これをDBなりに突っ込むときに「海抜0mの日本土地」って登録すると必要データ量がおっとろしいことになってしまうんだよ。

これを(情報必要いから)null、ってしてしまえばchar(255)のフィールドに入るデータは1ビットで済むわけだ。

そうすりゃ32GBのmicroSDにも日本の地形データを全部納められるようになるって寸法よ。

ま、true/false/nullだと格納すべき情報量は本来のものより倍になってるけどなw

2018-05-27

anond:20180526164242

日本の人たちがcharキャラと読んでたって別に構わないんだけど、元のエントリに列挙されてるのが、「英語の読み方から大きくずれた恥ずかしい読み方と、益田にとってしっくりくる本来の読み方に近い読み方」だったのにcharだけ逆だったから気になっただけだ。

2018-05-26

anond:20180526085316

最初Pascal習ったとき教官

char」を「キャー」って読んでて吹き出した思い出

anond:20180526164242

手元のmacでやってみよう

% say char -vSamantha

チャーってはっきり発音してる

anond:20180526164242

改めてググってきたけどやっぱり英語圏では「チャー」がほとんど。

最低でも "chara" と a の母音がない char英単語として「キャラ」と読む場合はかなり違和感ある。

character の略だからキャラ」と略すのは、ものすごく日本人英語っぽい。

ただそもそも char略称英単語でもなく、

英語フォーラムでも読み方を議論してるぐらいだから、正しい読み方を決める方が間違い。

アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん