How to Convert Char Array to Int in C++

Jinku Hu Feb 12, 2024
  1. Use the std::strtol Function to Convert a char Array to an int
  2. Use the std::atoi Function to Convert a char Array to an int
  3. Use the std::sscanf Function to Convert a char Array to an int
  4. Use a Loop to Convert a char Array to an int
  5. Conclusion
How to Convert Char Array to Int in C++

In C++, converting a character array (char array) to an integer is a common task, often required when processing user input or dealing with data stored as strings. The process involves extracting the numerical information from the character array and representing it as an integer value.

Various methods are available for accomplishing this task, each with its advantages and use cases.

In the following discussion, we will explore different approaches, including functions such as std::strtol, std::atoi, and std::sscanf, as well as a loop-based technique. These methods offer flexibility and varying levels of complexity, catering to different scenarios and requirements in the realm of C++ programming.

Use the std::strtol Function to Convert a char Array to an int

The std::strtol function converts a C-style string (char array) to a long integer. It allows you to specify the base of the numeral system (e.g., decimal, octal, hexadecimal) and provides a pointer to the first invalid character encountered during parsing.

It’s part of the C standard library and is useful for handling more complex conversions with error checking.

Basic Syntax:

std::strtol(str, &endPtr, 10);
  • std::strtol: Function for converting a C-style string to a long integer.

  • str: The input C-style string to be converted.

  • &endPtr: Pointer to a character pointer that will be set to the first invalid character.

  • 10: The base of the numeral system (e.g., decimal).

Code:

#include <iostream>

int main() {
  const char charArray[] = "23323experimental_string";

  char* endPtr;
  long int intValue = std::strtol(charArray, &endPtr, 10);

  if (charArray != endPtr) {
    std::cout << "Converted Integer: " << intValue << std::endl;
  } else {
    std::cerr << "Conversion failed. No valid characters found." << std::endl;
  }

  return 0;
}

The code uses std::strtol to convert the C-style string "23323experimental_string" to a long integer. The conversion stops at the first non-numeric character ('e'), and the remaining characters are ignored.

Output:

Converted Integer: 23323

In the output, we can see the result of the converted integer value from the initial portion of the input string, which is 23323.

Use the std::atoi Function to Convert a char Array to an int

std::atoi converts a C-style string (char array) to an integer. It’s a simple function that reads characters until the first non-numeric character is encountered.

It’s easy to use but lacks error-handling capabilities. It’s suitable for basic conversions when you can assume the input is well-formed.

Basic Syntax:

int result = std::atoi(str);
  • std::atoi: Function for converting a C-style string to an integer.

  • str: The input C-style string to be converted.

Code:

#include <iostream>

int main() {
  const char charArray[] = "23323experimental_string";

  int intValue = std::atoi(charArray);
  std::cout << "Converted Integer: " << intValue << std::endl;

  return 0;
}

The code uses std::atoi to convert the C-style string "23323experimental_string" to an integer. The function reads characters from the input string until the first non-numeric character ('e') is encountered, and it converts the numeric portion to an integer.

Output:

Converted Integer: 23323

The output 23323 represents the successfully converted integer value from the initial portion of the input string until the first non-numeric character.

Use the std::sscanf Function to Convert a char Array to an int

std::sscanf is a function from the C standard library that performs formatted input from a string. It allows you to parse a string using a format specifier (similar to printf), extracting values based on the specified format.

In this case, %d is used to extract an integer. It’s versatile but may be considered overkill for simple conversions.

Basic Syntax:

std::sscanf(str, "%d", &result);
  • std::sscanf: Function for formatted input from a string.

  • str: The input C-style string to be parsed.

  • "%d": Format specifier indicating an integer.

  • &result: Address of the variable where the result will be stored.

Code:

#include <iostream>

int main() {
  const char charArray[] = "23323experimental_string";

  int intValue;
  std::sscanf(charArray, "%d", &intValue);
  std::cout << "Converted Integer: " << intValue << std::endl;

  return 0;
}

The code uses std::sscanf to parse the C-style string "23323experimental_string" and extract an integer. The format specifier %d indicates that the function should look for an integer in the string.

Similar to std::atoi, std::sscanf stops parsing at the first non-numeric character ('e').

Output:

Converted Integer: 23323

The output 23323 represents the successfully converted integer value from the initial portion of the input string until the first non-numeric character.

Use a Loop to Convert a char Array to an int

A loop-based approach manually iterates over each character in the char array, checks if it is a digit, and accumulates the result to form an integer.

This method provides full control over the conversion process and allows for custom error handling. It’s suitable for scenarios where fine-grained control or additional processing is needed during conversion.

Basic Syntax:

for (int i = 0; str[i] != '\0'; ++i) {
  if (std::isdigit(str[i])) {
    result = result * 10 + (str[i] - '0');
  }
}
  • for loop: The loop used for iterating over each character in the C-style string.

  • str: The input C-style string to be processed.

  • result: Variable to accumulate the integer result.

  • std::isdigit(str[i]): Check if the current character is a digit.

  • result = result * 10 + (str[i] - '0'): Update the result by adding the digit to the accumulated value.

Code:

#include <iostream>

int main() {
  const char charArray[] = "23323experimental_string";

  int intValue = 0;
  for (int i = 0; charArray[i] != '\0'; ++i) {
    if (std::isdigit(charArray[i])) {
      intValue = intValue * 10 + (charArray[i] - '0');
    }
  }

  std::cout << "Converted Integer: " << intValue << std::endl;

  return 0;
}

The code manually converts the C-style string "23323experimental_string" to an integer using a loop. It iterates through each character in the string and checks if the character is a digit using std::isdigit.

If it’s a digit, the numeric value is extracted, and the integer value is updated.

Output:

Converted Integer: 23323

The output 23323 represents the successfully converted integer value from the initial numeric portion of the input string. The loop effectively filters out non-numeric characters and builds the integer accordingly.

Conclusion

We explored different methods for converting a C-style string to an integer in C++. We covered std::strtol for complex conversions with error checking, std::atoi for simple cases, and std::sscanf for versatile formatted input.

Additionally, a loop-based approach provided control over the conversion process. Each method was illustrated using the input string "23323experimental_string", resulting in the integer value 23323.

The choice of method depends on specific needs, with each approach offering unique advantages.

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Related Article - C++ Convert