渡された文字列のアルファベットを数値に直して加算して結果を出力するプログラムです。C言語です。
アルファベットのAからZまでが1から26まで(小文字のaからzまでも同様に1から26)
の数値に対応し、語の文字列のアルファベットを順に加算していった結果が、その語の値となります。
スペースを空けても渡された引数を全て読み込むので、英熟語にも対応し、英文も対応していて、その和を返します。
lc.c
/*
文字列のアルファベットを数字に
直して加算して出力する
filename : lc.c
Usage1 : lc alice pleasance liddell
Usage2 : echo alice pleasance liddell | lc
output : 164
to complie : cc lc.c -o lc
*/
#include <stdio.h>
#include <stdlib.h>
int pv(char *sp) {
int s=0;
while(*sp!='\0'&&*sp!='\n') {
if (*sp>='A' && *sp<='Z')
s+=*sp-'A'+1;
else if (*sp>='a' && *sp<='z')
s+=*sp-'a'+1;
++sp;
}
printf("%d\n",s);
}
int main(int argc,char *argv[])
{
char *sp;
char sentence[65536];
int i,s,cnt,ch;
if (argc==1) {
sp=sentence;
while(1) {
ch=fgetc((FILE *)stdin);
if (ch==EOF) exit(0);
if (ch=='\n') {
*sp='\0';
pv(sentence);
sp=sentence;
}
else *sp++=ch;
}
}
else {
for(i=0,cnt=1;cnt<argc;cnt++) {
sp=*++argv;
while(*sp!=0) {
sentence[i++]=*sp++;
}
*sp='\0';
}
}
pv(sentence);
exit(0);
}
おまけ
lcのguiのラッパーです。bashのシェルスクリプトです。zenityのインストールが必要です。
(1)lcをPATHの通ったディレクトリに置き、
(2)Arch Linux:sudo pacman -S zenity
,Ubuntu:sudo apt-get install zenity
等としてzenityをインストールし、
(3)chmod +x lc-gui
として実行権を付け、
(4)./lc-gui
として実行してください。
#!/usr/bin/bash
while :
do
i=$(zenity --entry --title="Letter Count" --text="Input text" --entry-text="")
j=`echo $i|/home/gar/bin/lc`
if zenity --question --text="$j\ncontinue?"; then
continue
else
break
fi
done