將字符串轉換為一個整數


1 題目

函數:fun()

功能:將字符串轉換為一個整數

描述:

【不能使用C語言提供的字符串函數】

輸入:字符串"-1234"

輸出:整型 -1234

2 思路

思路:將字符串每個位置的字符進行對應的ASCII碼轉換

例如:字符 '0'-'9' 對應的十進制整數是48~57,那么,將對應的整數減去48就得到了對應的整數

二進制 十進制 十六進制 字符
0011 0000 48 30 0
0011 0001 49 31 1
0011 0010 50 32 2
0011 0011 51 33 3
0011 0100 52 34 4
0011 0101 53 35 5
0011 0110 54 36 6
0011 0111 55 37 7
0011 1000 56 38 8
0011 1001 57 39 9

3 代碼

#include<stdio.h> 
#include<string.h>

/**
函數:fun()
功能:將字符串轉換為一個整數

描述:
【不能使用C語言提供的字符串函數】
輸入:字符串"-1234"
輸出:整型 -1234
**/

long fun(char *p) {
	int r = 0;		//數字個數
	long res = 0L;	// 轉化后的數字
	int pos = 1;		// 位數*10 *100 ...
	int size = strlen(p); 	// 字符串長度
	if (p[0] == '-'){
		r = size - 1;
	} else {
		r = size;
	}
	// 從前往后轉換的話,需要分情況去計算。即:不是負數的話從p[0] 和 如果是負數的話需要從p[1]開始
	// 所以,可以從后往前計算,循環次數是 r 
	for (int i = 0; i < r; ++i) {
		res += (p[size-1-i]-48)*pos;
		pos *= 10;
	}
	return p[0]=='-'?-res:res; 
}

int main(int argc, char const *argv[]) {
	char s[6];
	printf("Enter a string: ");
	gets(s);
	long res = fun(s);	
	printf("Convert Result: %ld\n", res);
	return 0;
}

示例結果:

$ gcc ex1.c -o demo
$ ./demo
Enter a string: -1234
Convert Result: -1234
$ ./demo
Enter a string: 9089
Convert Result: 9089


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM