Open In App

Convert a String to Integer Array in C/C++

Given a string str containing numbers separated with “, “. The task is to convert it into an integer array and find the sum of that array. Examples:

Input : str  = "2, 6, 3, 14"
Output : arr[] = {2, 6, 3, 14}
Sum of the array is = 2 + 6 + 3 + 14 = 25

Input : str = "125, 4, 24, 5543, 111"
Output : arr[] = {125, 4, 24, 5543, 111} 

Approach:

arr[j] = arr[j] * 10 + (Str[i] – 48)

Below is the implementation of the above idea: 




// C++ program to convert a string to
// integer array
#include <bits/stdc++.h>;
using namespace std;
 
// Function to convert a string to
// integer array
void convertStrtoArr(string str)
{
    // get length of string str
    int str_length = str.length();
 
    // create an array with size as string
    // length and initialize with 0
    int arr[str_length] = { 0 };
 
    int j = 0, i, sum = 0;
 
    // Traverse the string
    for (i = 0; i<str.length(); i++) {
 
        // if str[i] is ', ' then split
        if (str[i] == ',')
            continue;
         if (str[i] == ' '){
            // Increment j to point to next
            // array location
            j++;
        }
        else {
 
            // subtract str[i] by 48 to convert it to int
            // Generate number by multiplying 10 and adding
            // (int)(str[i])
            arr[j] = arr[j] * 10 + (str[i] - 48);
        }
    }
 
    cout<<"arr[] ";
    for (i = 0; i <= j; i++) {
        cout << arr[i] << " ";
        sum += arr[i]; // sum of array
    }
    cout<<endl;
    // print sum of array
    cout<<sum<<endl;
}
 
// Driver code
int main()
{
    string str = "2, 6, 3, 14";
 
    convertStrtoArr(str);
 
    return 0;
}

Output
arr[] 2 6 3 14 
25

Time Complexity: O(N), where N is the length of the string.
Auxiliary Space: O(N), Where N is the length of the string

Approach : Using Regular Expressions and Mapping

Below is the implementation of the above approach: 




// C++ program of the above approach
 
#include <iostream>
#include <numeric>
#include <regex>
#include <vector>
 
std::pair<std::vector<int>, int>
convertAndSum(const std::string& str)
{
    std::vector<int> arr;
 
    // Extract all the numbers using regular
      // expressions
    std::regex pattern("\\d+");
    std::sregex_iterator it(str.begin(), str.end(),
                            pattern);
    std::sregex_iterator end;
 
    while (it != end) {
        // Convert the extracted number into an
        // integer and add it to the array
        arr.push_back(std::stoi(it->str()));
        ++it;
    }
 
    // Calculate the sum of the array
    int arraySum
        = std::accumulate(arr.begin(), arr.end(), 0);
 
    return { arr, arraySum };
}
 
// Driver Code
int main()
{
    std::string str = "2, 6, 3, 14";
    auto result = convertAndSum(str);
 
    std::cout << "arr[] = ";
    for (int num : result.first) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
 
    std::cout << "Sum of array is = " << result.second
              << std::endl;
 
    return 0;
}

Output
arr[] = 2 6 3 14 
Sum of array is = 25

Time Complexity: O(N), where N is the length of the input string.
Auxiliary Space: O(M), where M is the number of numbers in the input string.


Article Tags :