1. 程式人生 > >c語言字串與整數之間的轉換

c語言字串與整數之間的轉換

在c語言中,我們經常面臨需要將字串轉換為整型,以及將整型轉化為字串的問題。

將字串轉換為整數的函式在stdlib.h中定義:

int atoi(const char *str);

atoi函式會跳過str中前面出現的空格,從第一個數字開始轉換。下面是我的實現:

int my_atoi(const char *str)
{  
    //argument check first!   
    assert (NULL != str);  
    int ret = 0, sign = 1;  
    //skip tab and space   
    for (; *str == ' '||*str == '\t'; ++str);  
    if (*str == '-')
	{sign = -1;} 
    if (*str == '-' || *str == '+')
	{++str;}
    while (isdigit(*str))
	{  
        ret = ret*10 + *str - '0';  
        ++str;  
    }  
    return sign*ret;  
} 

要注意的幾點:

1.引數檢驗。始終要放在最開始,在輸入是指標的情況下,永遠不要忘記首先檢驗是否是NULL指標;

2.字串開始處的空格(我還加入了製表符)要注意跳過;

3.符號,不要忘了數字字串第一個字元可能出現加號和減號!

對於將數字轉換為字串,c標準中並沒有定義(itoa只是在一些編譯器中自己定義)。c標準中沒有定義的原因我覺得是數字轉成字串可以使用sprintf格式化輸出函式來完成。當然我們可以自己編寫一個itoa函式。這裡的引數原型參照的是vc中定義的itoa:

#define ABS(cond) (cond>0?cond:-cond)   
char *my_itoa(int value, char *string, int radix)  
{  
	assert (string != NULL);  
	char tmp[32] = {'\0'};  
	int tmpval = ABS(value);  
	int i, j;  
	for (i = 0; i < 32; ++i)  
	{                  
		tmp[i] = (tmpval % radix) + '0';  
		tmpval = tmpval / radix;  
		if (tmpval == 0)  
			break;  
	}  
	if (value < 0) 
	{tmp[++i] = '-';}  
	for (j = 0; i >= 0; --i)  
	{string[j++] = tmp[i];}  
	string[j] = '\0';  
	return string;  
}

當然,一般情況下我們使用sprintf就可以完成任務啦:
char num[32];
sprintf(num, "%d", 12345);

 c/c++中把字串轉換成整數,把整數轉換成字串

#include <stdlib.h>	//這個是標頭檔案
long   atoi(char *);	//這個是把字元轉換整數
double atof(char *);	//這個是轉換浮點
char   itoa(int i);	//把整數轉為字串

------------------------------------------------------------------------------------------------------------------------

itoa 網友寫的思路原始碼,把整數換成字元,sign判斷正負數,不過這

void itoa(int n, char s[]) 
{ 
	int i;
	int sign; 
	if ((sign=n)<0)
	{n = -n;}

	i = 0; 

	do 
	{s[i++] = n % 10 + '0';}
	while ((n /= 10) > 0); 

	if (sign<0)
	{s[i++] = '-';} 

	s[i] = '\0'; 
	reverse(s);    // 把S倒序,不是C/C++裡面的函式????
}

還有一個 ,這個函式有3個引數,第一轉換的數,第二是轉換後的字元,第三是進位制,不過這個函式沒有把STRING倒序

void my_itoa(int value ,char *string, int radix) 
{ 
	char *psLetter="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

	while (value%radix != 0) 
	{ 
		*string++ = psLetter[value%radix]; 
		value = value / radix; 
	} 
	*string = 0;
}

下面這個用遞迴演算法,解決倒序問題。VC6.0上測試可用。

#include <stdio.h> 
#include <math.h> 

char* my_itoa(int value, char * string, int radix) 
{ 
	if (value < 0) 
	{ 
		*string = '-'; 
		value = abs(value); 
		itoa(value, string+1, radix); 
		return string ; 
	} 

	if (value%radix == 0 && value/radix == 0) 
	{return string;}

	string = itoa(value/radix, string, radix); 
	if (value % radix >10) 
	{*string ='A'+value%radix-10;}
	else 
	{*string = '0' + value%radix;} 

	*(string+1) = NULL; 

	return string+1; 
} 

void main(void) 
{ 
	int a; 
	char s[25]; 
	a = -15; 
	my_itoa(a, s, 10); 
	printf("%s", s); 
	getchar(); 
}  
轉自:http://www.cnblogs.com/GL-BBL/archive/2012/08/19/2646467.html
對程式碼進行了一點整理,方便閱讀,若有錯誤,希望能夠指出。

相關推薦

c語言字串整數之間轉換

在c語言中,我們經常面臨需要將字串轉換為整型,以及將整型轉化為字串的問題。將字串轉換為整數的函式在stdlib.h中定義:int atoi(const char *str);atoi函式會跳過str中前面出現的空格,從第一個數字開始轉換。下面是我的實現:int my_atoi

【整理】C/C++中字串整數之間的相互轉換

最近刷題過程中總是碰到這個知識點,因此做個總結記錄一下。 一、用C標準IO庫中的sprintf()和sscanf()轉換  sprintf()函式原型: #include <stdio.h> int sprintf(char *str,const char

C語言字串數字相互轉換

在C/C++語言中沒有專門的字串變數,通常用字元陣列來存放字串。字串是以“\0”作為結束符。C/C++提供了豐富的字串處理函式,下面列出了幾個最常用的函式。   ● 字串輸出函式puts。   ● 字串輸出函式gets。   ●

字串整數之間轉換

最近經常用到字串與整數之間的轉換,整理了一下,包含 1、檢驗是否為整數 2、字串轉為整數 3、從字串中提取數字 直接上程式碼: /** * 檢查是否為INT型別,已經對空進行處理 */ public static boolean isInt(

C/C++中字串數字之間轉換

#include "iostream" #include "string" #include "sstream" #include "cstdio" using namespace std; string num2str(double a) {    stringstream ss;ss << a

c++中字串數字的轉換

字串流類(sstream)用於string的轉換 <sstream>:相關標頭檔案 istringstream:字元輸入流 ostringstream:字元輸出流 使用方法: #inclu

C語言 指標整數相加/減,指標遞增/遞減示例

C語言指標變數包含指標自己的地址、儲存單元儲存的內容(指向的地址)、指向的地址上儲存的值。 指標自己的地址:&指標名 儲存單元儲存的內容(指向的地址):指標名 指向的地址上儲存的值:*指標名 下面一個示例演示了指標變數與整數相加/減,指標遞增/遞減時上述三種數值的

C++ 中字串數字的轉換

數字轉字串1.sprintf_s函式 //sprintf函式 int a = 100; float b = 10.30; char str[10]; sprintf_s(str,"%d",a

C語言字串整數atoi函式

/*字元轉整數(包括負數) */ #include<stdio.h> int atoi(char *string)     {int value=0,flag=0;while((*stri

C語言字串結構體

#include <stdio.h> #include <string.h> struct Book{     char title[50];     char auther[10];     int page; }; int main(){   

C/C++中字串數值相互轉換

第一種方法: 數字轉換成字串: #include <iostream> #include <sstream> #include <string> using namespace std; string num2str(double

OC字串C語言字串之間的相互轉換

1、C轉OC字串 const char *cString = "This is a C string"; // 動態方法 NSString *ocString1 = [[NSString alloc] initWithUTF8String:cString]; NSString *ocString2 = [

C語言快速實現整數IP和字串IP之間轉換

IP一般由32位整陣列成,按每8位劃分為4部分:255.255.255.255 該顯示方式為字串形式,而IP一般是以整數形式顯示。下面通過位移和求餘取整操作快速實現整數IP轉換為字串IP: 整數I

C語言字串整數的相互轉換

C語言提供了幾個標準庫函式,可以將任意型別(整型、長整型、浮點型等)的數字轉換為字串,下面列舉了各函式的方法及其說明。 # include <stdlib.h> 將數字轉換為字串   ● itoa():將整型值轉換為字串。   ● ltoa():將長整

C 語言---數字中文大寫數字之間轉換(實用)

#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int i=0,count=0; //計數器 char

C#】Hex字串整數的相互轉換

本文轉換的資料是字元型的日期,數字採用了long,如果是int的情況,將Convert.ToInt64()換成Convert.ToInt32應該就可以了。 //將一個(長)整數轉為Hex字串 Str

C#實現Streambyte[]之間轉換實例教程

inpu more family get this splay 登錄 line mem 本文以實例形式詳細介紹了C#實現Stream與byte[]之間的轉換的方法,分享給大家供大家參考之用。具體方法如下: 一、二進制轉換成圖片 MemoryStream ms = new

嵌入式C語言--指標字串

使用指標這一工具來操作字串。 定義字串變數的初始化方法 char *strptr = "liefyuan"; char strarray1[] = "liefyuan"; char strarray2[8] = "liefyuan"; char strarray3[8] = {'

c++ 中 char string 之間的相互轉換

第一部分: 將  char *    或者    char []   轉換為  string 可以直接賦值,轉換。       第二部分: 將  &n

字串陣列之間的互相轉換

將物件或者陣列或者物件陣列轉換成字串------JSON.stringify let obj= {name:'ming',age:18} console.log(JSON.stringify(obj)); let obj= [{name:'ming'