LoginSignup
0
0

文字列のアルファベットを数字に直して加算して出力する

Last updated at Posted at 2019-05-30

渡された文字列のアルファベットを数値に直して加算して結果を出力するプログラムです。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
0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0