當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++ String轉int用法及代碼示例


將字符串轉換為 int 是 C++ 中最常遇到的任務之一。由於 string 和 int 不在同一對象層次結構中,因此我們無法像 double 到 int 或 float 到 int 轉換那樣執行隱式或顯式類型轉換。轉換主要是為了我們可以轉換存儲為字符串的數字。

例子:

str=”191″

num=191

C++ 中有 5 種將字符串轉換為數字的重要方法,如下所示:

  1. 使用stoi()函數
  2. 使用atoi()函數
  3. 使用字符串流
  4. 使用sscanf()函數
  5. 使用 for 循環
  6. 使用strtol()函數

1. 使用stoi()函數將字符串轉換為int

stoi() function in C++ 將字符串作為參數並以整數形式返回其值。這種方法在當前版本的 C++ 中很流行,因為它是在 C++11 中首次引入的。

如果你仔細觀察stoi(),你會發現它代表:

stoi() function with example and meaning

簡單來說 stoi() 的細分

用法:

int stoi(string str, size_t position = 0, int base = 10);

參數:

  • str:要轉換的字符串。 (強製性的)
  • position:起始位置。 (可選,默認值 = 0)
  • base:數係的基數。 (可選,默認值 = 10)

例子:

C++


// C++ program to demonstrate 
// working of stoi()
// Work only if compiler supports
// C++11 or above. Because STOI()
// was added in C++ after 2011
#include <iostream>
#include <string>
using namespace std;
// Driver code
int main()
{
  string str1 = "45";
  string str2 = "3.14159";
  char str3[] = "31337 geek";
  // type of explicit type casting
  int myint1 = stoi(str1);
   
  // type of explicit type casting
  int myint2 = stoi(str2);
     
  // type of explicit type casting
  int myint3 = stoi(str3);
  cout << "stoi(\"" << str1 << 
          "\") is " << myint1 << '\n';
    cout << "stoi(\"" << str2 << 
            "\") is " << myint2 << '\n';
    cout << "stoi(\"" << str3 << 
            "\") is " << myint3 << '\n';
    return 0;
}
輸出
stoi("45") is 45
stoi("3.14159") is 3
stoi("31337 geek") is 31337

我們可以看到,stoi()方法同時支持C++風格和C風格字符串。

我們還可以使用atoi()函數來執行此任務。

2. 使用atoi()將字符串轉換為int

atol(), atoll() and atof()接受字符數組或字符串文字作為參數並以整數。它定義在<stdlib.h>頭文件。該函數是 C++ 從 C 語言繼承的,因此它僅適用於 C 風格的字符串,即字符數組。

如果你觀察atoi()靠近一點你會發現它代表:

Breakdown of atoi() in simple terms

簡單來說 atoi() 的細分

例子:

C++


// C++ program to demonstrate the
// functioning of the atoi() function
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
    char* str1 = "141";
    char* str2 = "3.14";
    int res1 = atoi(str1);
    int res2 = atoi(str2);
    cout << "atoi(" << str1 << ") is " << res1 << "\n";
    cout << "atoi(" << str2 << ") is " << res2 << "\n";
    return 0;
}
輸出
atoi(141) is 141 
atoi(3.14) is 3 

stoi() vs atoi()

stoi()

atoi()

1. C++ 11中添加stoi() 1. atoi() 是一個遺留的 C 風格函數
2. stoi() 適用於 C++ 字符串和 C 風格字符串(字符數組和字符串文字) 2.atoi()僅適用於C風格字符串(字符數組和字符串文字)
3.stoi()最多可以帶三個參數,第二個參數用於
起始索引和第三個參數是輸入數字的基數。
3.atoi()僅采用一個參數並返回一個整數值

4. 用法:

int stoi (const string& str, size_t* 索引 = 0, int 基數 = 10);

4. 用法:

int atoi (const char * str);

3. 使用 stringstream 類將字符串轉換為int

C++ 中的 stringstream 類允許我們關聯一個要讀取的字符串,就好像它是一個流一樣。我們可以使用它輕鬆地將數字字符串轉換為整數、浮點數或雙精度數。這字符串流類定義在 <> 頭文件。

它的工作方式與 C++ 中的其他輸入和輸出流類似。我們首先創建一個 stringstream 對象,如下所示:

用法:

stringstream ss;

然後使用 ( << ) 插入運算符將數字字符串插入其中。

例子:

ss << myString;
ss << myCstring;
ss << myInt; or float, or double, etc.

最後,我們使用 ( >> ) 提取運算符從流中提取數值。

例子:

ss >> myChar;
ss >> myCstring;
ss >> myInt;

下麵的 C++ 程序演示了如何使用 stringstream 對象將字符串轉換為 int:

C++


// C++ program to demonstrate the
// use of a stringstream to
// convert string to int
#include <iostream>
#include <sstream>
using namespace std;
// Driver code
int main()
{
    string s = "12345";
    // object from the class stringstream
    stringstream geek;
    // inserting string s in geek stream
    geek << s;
    // The object has the value 12345
    // and stream it to the integer x
    int x = 0;
    geek >> x;
    // Now the variable x holds the
    // value 12345
    cout << "Value of x + 1 : " << x + 1;
    return 0;
}
輸出
Value of x + 1 : 12346

總而言之,stringstream 是一種操作字符串的便捷方法。此方法也適用於 C 樣式字符串或 C++ 樣式字符串。

4. 使用sscanf()將字符串轉換為int

'sscanf()'是一個類似於scanf()的C風格函數。它從字符串而不是標準輸入讀取輸入。

sscanf 的語法:

int sscanf (const char * source, const char * formatted_string, ...);

參數

  • 來源- 源字符串。
  • formatted_string- 包含以下內容的字符串格式說明符.
  • ……:- 變量參數列表,其中包含我們要存儲輸入數據的變量的地址。

這些參數的數量至少應與格式說明符存儲的值的數量一樣多。

返回:

  • 成功時,該函數返回填充的變量數。
  • 如果輸入失敗,在成功讀取任何數據之前,將返回函數結尾(EOF)。

例子:

C++


// C++ program to demonstrate
// the working of sscanf() to
// convert a string into a number
#include <iostream>
using namespace std;
int main()
{
    const char* str = "12345.0000046";
    float x;
    sscanf(str, "%f", &x);
    cout << "The value of x : " << x << endl;
    return 0;
}
輸出
The value of x : 12345

5.使用For循環將字符串轉換為int

這是 string-to-int 轉換的簡單方法,我們將每個字符與其 ASCII 值進行比較,然後獲取該數字字符的值。

下麵是使用for循環將字符串轉換為數字的C++程序:

C++


// C++ Program to convert String
// into number using for loop
#include <bits/stdc++.h>
using namespace std;
int main()
{
    string number = "13";
    int i = 0;
    // Traversing string
    for (char c : number) {
        // Checking if the element is number
        if (c >= '0' && c <= '9') {
            i = i * 10 + (c - '0');
        }
        // Otherwise print bad output
        else {
            cout << "Bad Input";
            return 1;
        }
    }
    cout << i;
}
輸出
13

但是,上述函數不能用於將負數字符串轉換為整數。為此,我們必須檢查字符串的第一個索引是否包含 “-” 符號,如果是,那麽我們會將數字轉換為整數,然後在其前麵使用此 “-” 符號來表示字符串中存在的數字是一個負數。

6. 使用strtol()將字符串轉換為int

使用 strtol 函數:它將字符串分別轉換為長整型值。

strtol()的語法:

long int strtol(const char* str, char** endptr, int base);

參數:

  • str- 指向要轉換的以空字符結尾的字節字符串的指針
  • endptr- 引用指向字符的指針。該函數將第一個無效字符的地址存儲在*endptr 中。如果 endptr 是空指針,則該函數不存儲此信息。
  • base-解釋字符串的數字基數。必須介於 2 到 36(含)或 0 之間。如果基數為 0,則該函數根據字符串本身確定基數。如果基數為 16,則字符串可能以前綴 “0x” 或 “0X” 開頭,在這種情況下,數字將被解析為十六進製值。

返回:

  • 如果字符串為空或不包含任何數字,則返回 0。
  • 如果轉換成功,該函數將返回轉換後的長整型值。
  • 如果轉換失敗,該函數返回 0 並設置 *endptr 指向字符串的開頭。

例子:

C++


#include <stdio.h>
#include <stdlib.h>
int main() {
  char str[] = "12345";
  char* endptr;
  long int value = strtol(str, &endptr, 10);
  if (endptr == str) {
    printf("No digits were found\n");
  } else if (*endptr != '\0') {
    printf("Invalid input: %s\n", str);
  } else {
    printf("The value is %ld\n", value);
  }
  return 0;
}
輸出
The value is 12345

時間複雜度:O(N),其中 N 是字符串中的字符數。
輔助空間:O(1)



相關用法


注:本文由純淨天空篩選整理自佚名大神的英文原創作品 Convert String to int in C++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。