首頁 > 軟體

一起來學習C語言的字串轉換函數

2022-02-18 19:00:34

字串轉整數

字串轉換為整數的函數有兩個,他們的函數原型如下:

	int __cdecl atoi(const char *_Str);
  	long __cdecl atol(const char *_Str);

這兩個函數的用法都很簡單,atoi函數將字串轉換為整數int型,atol函數將字串轉換為長整形long int型。如果轉換無效,返回值都為0,下面通過一個簡單的例子看一下這兩個函數的用法。

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
   int val;
   long val_l;
   char str[20];
   strcpy(str, "1234");
   val = atoi(str);
   printf("字串值 = %s, 整型值 = %dn", str, val);
   strcpy(str, "abc");
   val = atoi(str);
   printf("字串值 = %s, 整型值 = %dn", str, val);
   
   strcpy(str, "98993489");
   val_l = atol(str);
   printf("n字串值 = %s, 長整型值 = %ldn", str, val_l);
   strcpy(str, "abc123");
   val_l = atol(str);
   printf("字串值 = %s, 長整型值 = %ldn", str, val_l);
   return 0;
}

給字串賦不同的值,然後使用,atoi函數和atol函數對字串進行轉換,輸出結果如下:

通過結果可以看出,只有當字串有效時才能正確的轉換成整數,否則轉換的結果就為0。

將字串轉換為整數的函數還有以下兩個:

long __cdecl strtol(const char * __restrict__ _Str,char ** __restrict__ _EndPtr,int _Radix);
unsigned long __cdecl strtoul(const char * __restrict__ _Str,char ** __restrict__ _EndPtr,int _Radix);

strtol() 函數用來將字串轉換為長整型數(long),它有三個引數:

  • _Str 為要轉換的字串,
  • _EndPtr 為第一個不能轉換的字元的指標,
  • _Radix 為字串 str 所採用的進位制。

trtol() 函數會將引數str字串根據引數base來轉換成長整型數(long)。引數base範圍從236,或0。引數base代表str採用的進位制方式,如base值為10則採用10進位制,若base值為16則採用16進位制等。

下面通過一個簡單的例子演示一下strtol() 函數的用法。

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
	char str[30] = "123 -456 abc";
	char *pEnd;
	long ret1,ret2;
	ret1 = strtol(str, &pEnd, 10);
	ret2 = strtol(pEnd, &pEnd, 10);
	printf("數位1是: %ldn", ret1);
	printf("數位2是: %ldn", ret2);
	printf("字串部分是: %s n", pEnd);
	return 0;
}

定義一個字串,然後使用strtol() 函數轉換字串中的數位,輸出結果如下:

通過列印的結果可以看出,strtol() 函數將字串中的兩個數位都成功換成為整數了。

strtol() 函數讀取字串時,讀取到第一個空格是,由於空白字元不能轉換,所以函數返回,並將空白字元的儲存在 pEnd中,接下來從空白位置繼續轉換,將字串“-456”轉換為數位之後,又遇到了空白字元,不能繼續轉換,函數退出,將第二個空白字元儲存在 pEnd中,最後將剩餘的字串換列印出來。

通過strtol() 函數就可以智慧的將字串的數位提取出來。

strtoul 函數用來將字串轉換成無符號長整型數(unsigned long),它的用法和strtol() 函數基本一樣。

修改上面的程式碼如下:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
	char str[30] = "123 456 abc";
	char *pEnd;
	long ret1,ret2;
	ret1 = strtoul(str, &pEnd, 10);
	ret2 = strtoul(pEnd, &pEnd, 10);
	printf("數位1是: %lun", ret1);
	printf("數位2是: %lun", ret2);
	printf("字串部分是: %s n", pEnd);
	return 0;
}

輸出結果為:

如果在字串的數位前面新增上負號,轉換的結果就會出錯。

在使用strtol() 函數和strtoul 函數時要注意兩點:

  • 當 base 的值為 0 時,預設採用 10 進位制轉換,但如果遇到'0x' / '0X'前置字元則會使用 16 進位制轉換,遇到 '0' 前置字元則會使用 8 進位制轉換。
  • 若 endptr 不為NULL,則會將遇到的不符合條件而終止的字元指標由 endptr 傳回;若 endptr 為 NULL,則表示該引數無效,或不使用該引數。

總結

本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!    


IT145.com E-mail:sddin#qq.com