定食屋おろポン

おろしポン酢と青ネギはかけ放題です

Cを勉強してみた。-社内プログラミングコンテスト便乗編-

Cで便乗してみた。

コマンドライン引数使ってないから課題の要件満たしてないけどねw

今回の疑問

  • iって使い回していいのかな。書いてても読んでも、特に分かりづらいとは感じないんだが。
  • strlenとかpowすら知らなかったからググったんだけど、他にも便利関数使ったらもっとすっきり書けるんじゃね?
  • 解答例見たら文字コードから変換してる人が多かったみたいだけど、それってCだと動作が保証されてないってどっかで読んだ気がするんだがそこらへんどうなんだろ。

Objective-CGUIアプリケーション書くためにCをお勉強しているわけだしなー」って思って、標準ライブラリとかコマンドライン引数はスルーして勉強してたんだけど、やっぱりひと通り何が出来るかくらいは見ておいたほうがいいなあ。
また調べてみよう。
NSIntegerとかNSStringのメソッド覚える方が先だけど。

#include <stdio.h>
#include <string.h>
#include <math.h>

int alphaToInt(char c);
char intToAlpha(int num);
void getDict(char dict[]);

int main(void)
{
	int i;
	int count;
	char alpha[100];
	int iAlpha[100];
	long int ans = 0;

	long int num;
	int numArray[100];
	char cNum[100];

	/* Input */
	printf("変換するアルファベット:");
	scanf("%s", alpha);
	printf("変換する数字:");
	scanf("%d", &num);

	/* Convert alphabet to int */
	count = strlen(alpha);
	for (i = 0; i < count; i++)
	{
		iAlpha[i] = alphaToInt(alpha[i]);
	}
	for (i = 0; i < count; i++)
	{
		ans += iAlpha[(count-1) - i] * pow(26, i);
	}
	printf("%d\n", ans);

	/* Conver int to alphabet */
	for (i = 0; num > 0; i++)
	{
		numArray[i] = (num - 1) % 26;
		num = floor((double)num/26);
	}
	count = i;
	for (i = 0; i < count; i++)
	{
		cNum[i] = intToAlpha(numArray[(count-1) - i] + 1);
	}
	cNum[count] = '\0';
	printf("%s\n", cNum);
	
	return 0;
}

int alphaToInt(char c)
{
	int i;
	char dict[27];
	getDict(dict);

	for (i = 0; i < 27; i++)
	{
		if(c == dict[i]) return i;
	}
}

char intToAlpha(int n)
{
	char dict[27];
	getDict(dict);

	return dict[n];
}

void getDict(char dict[])
{
	int i;
	char aDict[] = {0, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 
				'H', 'I', 'J', 'K', 'L', 'M', 'N', 
				'O', 'P', 'Q', 'R', 'S', 'T', 'U', 
				'V', 'W', 'X', 'Y', 'Z'
				};
	for (i = 0; i < 27; i++)
	{
		dict[i] = aDict[i];
	}
}