這次要介紹的題目在這裡~
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;
那麼這題的講解都到這裡啦
若想閱讀相關文章請關注我的粉絲團
小資菜鳥向前衝
留言列表