這次要介紹的題目在這裡~

http://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?id=671

[C_CH06-易] 判斷輸入變數的形式

問題描述:判斷輸入變數的形式

輸入說明:
可輸入整數 浮點數 字元 字串

輸出說明:
判斷輸入的是哪種形式 以int,float,char,string 分別表示

 

 

平常看到的題目都是題目指定輸入,再做後續的動作

但這個題目卻是要你寫出一個能判斷輸入形式的程式

那開始講解

<以下都是C++>

首先要了解這4個型別

int是整數型別:1,2,3,4....15468,487432,-1,0,-78這些都是整數

char是字元型別:@,!,Q,r,/,~這些就是字元

float是浮點數:0.14567,-445678.454這些是浮點數

string是字串型別:string就有比較多種像是,ant,elephant,How are you?,我是誰,這些都是字串

另外,如果一開始宣告輸入的型別是string

#include <iostream>
#include <string.h>
using namespace std;

int main()
{
    string input;

    getline(cin,input);
    return 0;
}

這樣不管輸入甚麼,都是字串型別

接著,開始解題

想要判斷輸入的是甚麼變數,要先考慮變數長度的問題

像1長度是1,20長度是2,elephant長度是8,0.414長度是5

所以一開始的宣告輸入,無論是int,char,float都不能萬用於以上這些例子

所以一開始宣告是string,輸入都是字串

.

接下來,就是判斷變數的程式碼

首先,要先從長度來判斷

所以要先知道input的長度

int len=input.size()打上這行就可以得知input的長度

len是變數,名字是我自己取的,所以不用拘泥一定要len

.

接下來,想想所有長度下,會有哪些可能的型別

在長度是1的時候,可能會有1,@,Q,J,[這些狀況,所以可以得知有int,char這些型別

再來,要知道是哪個型別,就要靠ASCII code了

(ASCIIhttps://zh.wikipedia.org/wiki/ASCII)

需要的有0~9也就是48~57

跟"."就是46

和"-"就是45

這些以下的程式碼都會用到

所以,程式碼如下

假如input[0]介於48~57,就是整數,印出int

否則就是字元,印出char

接著,如果有長度大於1的情況那就一定不是字元

所以就會int,float,string的狀況

那麼程式碼要怎麼寫呢

首先,我先設置一個變數sum=0

之後用一個for迴圈看input裡每一個位置是甚麼

再來就是設想各種情形

第一,甚麼情況下,會讓input是int,那就是每一個都是數字

又或者第一個位置可能是"-"的符號,讓input變成負數

我的程式碼就是

if(input[i]==45 && i==0)          //如果是"-",且在第一個位置,sum就+2
          sum+=2;

else if(input[i]>47 && input[i]<58)           //如果是整數,sum就+0
          sum+=0;

第二,甚麼情況下,會是float,那就是一串數字與一串數字中間會有"."隔開

但是,這個"."如果在第一位,最後一位和"-"後面,或者其他的位置不全是數字,

是符號或字母時,那就不是float了

就會是string

第三,剩下以上沒有的情況就是string

我的程式碼是

else if(input[i]==46)            //如果是"."
{
       if(sum==2 && i!=1 && i!=len-1)     //如果sum==2 ,也就是前面有負號或有負號和幾個數字,且不在負號後面和不在最後一位就+3
       {
            sum+=3;
       }
      else if(sum==0 && i!=len-1 && i!=0)     //如果sum==0,且不在第一位和最後一位,sum就+3
      {
           sum+=3;
      }
      else
          sum+=6;  //如果sum!=0 或 !=2,代表前面就符號或字母,所以+6
}
else    //除了以上情況剩下的,就+6
       sum+=6;

最後,如何印出

程式跑完判斷之後sum就會有一個值

如果是int,sum就會是0或2,因為負號+2,數字+0

如果是float,sum就會是3或5,因為在sum是0的狀況下(前面是數字,沒有負號)+3=3

在sum=2的情況下(前面有負號和數字)+3=5

那麼sum是其他狀況時,就是string了

if(sum==0 || sum==2)
     cout<<"int"<<endl;
else if(sum==3 || sum==5)
     cout<<"float"<<endl;
else
    cout<<"string"<<endl;

  

那麼這題的講解都到這裡啦

若想閱讀相關文章請關注我的粉絲團

小資菜鳥向前衝

https://www.facebook.com/%E5%B0%8F%E8%B3%87%E8%8F%9C%E9%B3%A5%E5%90%91%E5%89%8D%E8%A1%9D-204484273323335/?fref=ts

文章標籤
創作者介紹

cychss6305的部落格

cychss6305 發表在 痞客邦 PIXNET 留言(0) 人氣()