2013年9月6日金曜日

文字列を数値に変換する関数とその使い方

実行風景



以下コード=====================================================
#include <tchar.h>
#include <string>
#include <math.h>//pow関数に必要

//プロトタイプ宣言
int CharacterToValue(std::string Character,int Forward,int Backward);//文字列の指定した範囲を数値に変換してreturnする関数

int main(void){
 std::string SCI_pBufferRecieved;//受信した文字のバッファ
 SCI_pBufferRecieved=_T("0123456789");
 //格納されている文字列を数値に変換して格納する。
 int AD_Result0 = CharacterToValue(SCI_pBufferRecieved,0,0);
 int AD_Result1 = CharacterToValue(SCI_pBufferRecieved,1,1);
 int AD_Result2 = CharacterToValue(SCI_pBufferRecieved,9,9);
 int AD_Result3 = CharacterToValue(SCI_pBufferRecieved,0,9);
 int AD_Result4 = CharacterToValue(SCI_pBufferRecieved,1,5);//前から、0から数え始めて1番目と5番目までの文字を数値に変換
 int AD_Result5 = CharacterToValue(SCI_pBufferRecieved,3,6);
 int AD_Result6 = CharacterToValue(SCI_pBufferRecieved,4,9);
 int AD_Result7 = CharacterToValue(SCI_pBufferRecieved,0,8);

 printf("%d\n",AD_Result0);
 printf("%d\n",AD_Result1);
 printf("%d\n",AD_Result2);
 printf("%d\n",AD_Result3);
 printf("%d\n",AD_Result4);
 printf("%d\n",AD_Result5);
 printf("%d\n",AD_Result6);
 printf("%d\n",AD_Result7);
 printf("\n\n\n");
 SCI_pBufferRecieved=_T("00120");
 int AD_Result10 = CharacterToValue(SCI_pBufferRecieved,0,4);
 printf("%d\n",AD_Result10);
 system("pause");
 //system("pause > NUL");
 return 0;
}





//指定された範囲の文字列を数値に変換する関数(ゼロ以上の整数限定)

int CharacterToValue(std::string Character,int Forward,int Backward){

//Forward:「前方の」から数えてForward番目の文字,Backward:(「前方の」から数えて)「後方の」Backward番目の文字
 int Value=0;

 for(int Number=Forward
, Power=(Backward-Forward);       //これで両方ともintとして宣言されているはず。(異なる型の場合、このような宣言は不可。その場合は外で宣言する)
  (Number<=Backward);
//(Number<=Backward)&&(Power>=(Backward-Forward)); //タイミングとしては同じになるハズなのでどちらか一方でOK
  Number++, Power-- )//ここまでfor文
 {
  //Number:「数」の意味//[2]~[9]
  //Power:「乗」の意味//10^7~10^0
  Value += (Character[Number]-'0')*(int)pow((double)10,(double)Power);
  //(SCI_pBufferRecieved[Number]-'0')でアスキーコード(文字コード)を数値に変換する。(何故こうなるのかはアスキーコード表を参照すれば分かるはず)
 }

 return Value;
}
//==================================================================

 //実例に即して考えてみる
 //
 //■■□□□□□□□□■■
 //[0]~[11]までの12文字
 //□は8文字
 //変数がそれぞれ次のように定義される時
 //Forward=2  //ゼロから数え始めている事に注意!!
 //Backward=9 //ゼロから数え始めている事に注意!!
 //Backward-Forward=9-2=7
 //□を数値に変換する場合
 //
 //Value=[2]*(10の(Backward-Forward)乗)
 //  +[3]*(10の(Backward-Forward-1)乗)
 //  +[4]*(10の(Backward-Forward-2)乗)
 //  +[5]*(10の(Backward-Forward-3)乗)
 //  +[6]*(10の(Backward-Forward-4)乗)
 //  +[7]*(10の(Backward-Forward-5)乗)
 //  +[8]*(10の(Backward-Forward-6)乗)
 //  +[9]*(10の(Backward-Forward-7)乗)←+[9]*(10の(0)乗)
 //注意事項
 //1.文字列は0番目から数え始めている。
 //2.Forward<Backwardが成り立つ必要がある。
 //3.半角数字以外を指定してはいけない
 //4.変換できるのは0以上の整数だけ

0 件のコメント:

コメントを投稿