如何在C中解析一個整數到string(char* || char[])
?有沒有一個等效於C中的Java的Integer.parseInt(String)
方法?將整數解析爲字符串C
回答
如果要將整數轉換爲字符串,請嘗試使用函數snprintf()
。
如果要將字符串轉換爲整數,請嘗試使用函數sscanf()
或atoi()
或atol()
。
如果你想錯誤檢查,strtol或strtoul會比sscanf,atoi或atol更好。 – 2009-01-26 11:31:41
`atoi`已被棄用,我不會推薦使用它。 – jacwah 2015-06-14 07:53:13
Java parseInt()
函數解析字符串以返回一個整數。等效的C函數是atoi()
。但是,這似乎不符合您的問題的第一部分。你想從一個整數轉換爲一個字符串,或從一個字符串轉換爲一個整數?
您還可以檢查出atoi()
功能(ASCII到整數)和它的親戚,atol
和atoll
等
另外,還有一些函數,做相反的爲好,即itoa()
和合作。
爲int轉換爲字符串:
int x = -5;
char buffer[50];
sprintf(buffer, "%d", x);
你也可以做到這一點對雙打:
double d = 3.1415;
sprintf(buffer, "%f", d);
將字符串轉換爲int:
int x = atoi("-43");
見http://www.acm.uiuc.edu/webmonkeys/book/c_guide/以瞭解這些功能的文檔。
你的代碼有可能發生緩衝區溢出,但我不想計算你需要有多少位的整數才能實現。使用snprintf()。 – aib 2009-01-26 00:59:47
要在那裏有一個緩衝區溢出,空間爲50個字符,您將需要有163位整數,假設爲肯定的情況並存在空終止。 >>> math.log(10 ** 49)/math.log(2) 162.77447664948076 – Arafangion 2010-06-20 04:09:34
這聽起來像你有一個字符串,並希望將其轉換爲整數,由parseInt
提來看,雖然它不是從這個問題很清楚 ...
要做到這一點,使用strtol
。這個函數比atoi
稍微複雜一點,但作爲回報,它提供了一個更清楚的錯誤條件指示,因爲它可以填充一個指針(調用者提供)與第一個讓它感到困惑的字符的地址。然後調用者可以檢查違規字符並判定該字符串是否有效。 atoi
,相反,如果它丟失了,返回0,這並不總是有幫助 - 但如果你對這種行爲感到滿意,那麼你也可以使用它。
strtol
的示例使用如下。對錯誤的檢查非常簡單:如果第一個無法識別的字符不是結尾字符串的'\x0'
,則該字符串被認爲不包含有效的int。
int ParseInt(const char *s,int *i)
{
char *ep;
long l;
l=strtol(s,&ep,0);
if(*ep!=0)
return 0;
*i=(int)l;
return 1;
}
該函數用整數填充* i,如果字符串包含有效整數,則返回1。否則返回0.
有趣的是,這名男子頁的atoi說,這是等同於: (INT)strol(STR(字符* *)NULL,10) – 2013-04-07 19:22:15
這是Steve Summit的C常見問題中的discussed。
您可能需要查看兼容解決方案的this site。
你可以試試:
int intval;
String stringval;
//assign a value to intval here.
stringval = String(intval);
應該做的伎倆。
這不是最佳解決方案。這是我的解決方案,因爲有多種限制,所以如果您根據課程/教師的指導準則有限的資源,這可能非常適合您。
另外請注意,這是我自己的項目的實施一小部分,我不得不讀操作數,以及數字,所以我用則GetChars。否則,如果你只需要整數,沒有其他類型的角色,我喜歡用這樣的:
int k;
while (scanf("%d", &k) == 1)
規則沒有具體的,「先進的」 C概念:沒有字符串變量,沒有結構,沒有指針,沒有方法不是蓋的,也是唯一包含我們被允許進行的#include
所以沒有簡單的方法調用類似的atoi()或提供任何字符串變量的使用,我選擇了只是蠻力它。
1:在使用的getchar讀字符(與fgets被禁止)。返回1(退出狀態1)如果 存在無效字符。對於基於Java中的parseInt的問題 1 11 13是有效的,但1 11 1a是無效的,因此對於所有值,我們都有一個有效的「字符串」,如果所有字符都是0-9,忽略空格。
2:炭的ASCII值轉換爲其整數值(例如,48 => 0。)
3:使用變量val來存儲一個int,使得對於每個字符在一個「串」有是一個相應的整數數字。即「1234」=> 1234將它附加到一個int數組並將val設置爲0以供重用。
下面的代碼演示了這種算法:
int main() {
int i, c;
int size = 0;
int arr[10]; //max number of ints yours may differ
int val = 0;
int chars[1200]; //arbitrary size to fit largest "String"
int len = 0;
//Part 1: read in valid integer chars from stdin
while((c = getchar()) != EOF && (c < 58 && c > 47)) {
chars[len] = c;
len++;
}
//Part 2: Convert atoi manually. concat digits of multi digit integers and
// append to an int[]
for(i = 0; i < len; i++){
for(i = 0; i < len; i++){
if(chars[i] > 47 && chars[i] < 58){
while((chars[i] > 47 && chars[i] < 58)){
if(chars[i] == 48)
c = 0;
if(chars[i] == 49)
c = 1;
if(chars[i] == 50)
c = 2;
if(chars[i] == 51)
c = 3;
if(chars[i] == 52)
c = 4;
if(chars[i] == 53)
c = 5;
if(chars[i] == 54)
c = 6;
if(chars[i] == 55)
c = 7;
if(chars[i] ==56)
c = 8;
if(chars[i] == 57)
c = 9;
val = val*10 + c;
i++;
}
arr[size] = val;
size++;
if(size > 10) //we have a check to ensure size stays in bounds
return 1;
val = 0;
}
//Print: We'll make it a clean, organized "toString" representation
printf("[");
for(i = 0; i < size-1; i++){
printf("%d, ", arr[i]);
}
printf("%d]", arr[i];
return 0;
再次,這是蠻力方法,但是像我這樣的,你不能用專業的人使用的方法的概念或多種C99工具的情況下,這可能是你在找什麼。
- 1. 將包含數字的字符串解析爲整數
- 2. 用C解析「字符串」(char數組)爲字符串,整數和int
- 3. 將整數解析爲字符串的意外行爲
- 4. 如何解析NumberFormatException當解析字符串爲雙/整數
- 5. 將HTML字符串解析爲數組
- 6. 將字符串解析爲字符
- 7. 解析字符串到整數數組
- 8. 如何將SoapPrimitive字符串響應解析爲整數
- 9. 將十六進制字符串表示法解析爲整數
- 10. 將字符串解析爲布爾值或整數
- 11. 將字符串轉換爲整數C#
- 12. 整數和字符串解析
- 13. 錯誤的解析字符串整數
- 14. 將XML字符串解析爲數組字符串
- 15. 將字符串解析爲字典
- 16. C++如何將字符串拆分爲字符串和整數?
- 17. 如何解析對象數組並將字符串數字轉換爲整數
- 18. 將JSON字符串解析爲三個數組Objective C
- 19. C#字符串解析
- 20. 字符串解析在C#
- 21. C++字符串解析
- 22. C#解析JSON字符串
- 23. 解析字符串C
- 24. 解析C#字符串HH:MM:SS
- 25. C++解析,從字符串
- 26. 解析字符串C#
- 27. 解析字符串C#
- 28. C#解析字符串
- 29. 使用Boost-Regex將字符串解析爲字符和數字
- 30. 如何將字符串解析爲字符串格式爲$$$$$$$$時cc在c#中?
我想你得到了另一種方式:int Integer.parseInt(String)? – 2009-01-25 23:42:57