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:
- Create an empty array with size as string length and initialize all of the elements of array to zero.
- Start traversing the string.
- Check if the character at the current index in the string is a comma(,). If yes then, increment the index of the array to point to the next element of array.
- Else, keep traversing the string until a ‘,’ operator is found and keep converting the characters to number and store at the current array element. To convert characters to number:
arr[j] = arr[j] * 10 + (Str[i] – 48)
Below is the implementation of the above idea:
CPP
// 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; } |
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++
// 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; } |
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.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!