天天看點

c語言:如何将字元串轉為整數?

題目:将一個字元串轉換成一個整數,要求不能使用字元串轉換整數的庫函數。 數值為0或者字元串不是一個合法的數值則傳回0。

輸入描述:輸入一個字元串,包括數字字母符号,可以為空。

輸出描述:如果是合法的數值表達則傳回該數字,否則傳回0

頭:int StrToInt(string str) ;

例如:

輸入:+2147483647 1a33

輸出: 2147483647 0

一個整數,要麼正,要麼負,是以需要先判斷字元串的第一個字元是否為'+'或'-',如果是,那麼需要做一些事情:

        //若為負數先讓flag為-1,最後的結果乘以flag:-1 ;若為正數,就不用做什麼,最後的結果乘以flag:1
	int flag = 1;
	if (str[0] == '-') 
		flag = -1;

	//那麼第0位是+或-,則直接從第1位開始判斷
	int i = 0;
	if (str[0] == '+' || str[0] == '-')
		i++;
           

好了,接下來進入循環,隻有當字元為'0'到'9'時,它才算是有效的,其他一律無效。

那麼如何轉換為整數呢?其實方法很簡單:

for (;  i < length; ++i)
	{
		if (!(str[i] >= '0' && str[i] <= '9')) 
			return 0;
		
		ret = ret * 10 + str[i] - '0';
	}
           

接下來是完整代碼:

int StrToInt(string str) 
{
	int length = str.size();
	long long ret = 0;

	if (length <= 0)
		return 0;

	//若為負數先讓flag為-1,最後的結果乘以flag:-1 \
	  若為正數,就不用做什麼,最後的結果乘以flag:1
	int flag = 1;
	if (str[0] == '-') 
		flag = -1;

	//那麼第0位是+或-,則直接從第1位開始判斷
	int i = 0;
	if (str[0] == '+' || str[0] == '-')
		i++;

	for (;  i < length; ++i)
	{
		if (!(str[i] >= '0' && str[i] <= '9')) 
			return 0;
		
		ret = ret * 10 + str[i] - '0';
	}
	return ret * flag;
}
           

繼續閱讀