Today, I found a problem where we need to find the sum of numbers in a string, the string will be a mix of alphabets, numbers, and special characters, and usually, this can be solved by iterating through each character and adding all the numbers.
Example
Input: Ma1rix13ead
Output: 14 [1+13]
Input: Abhi12xyz3pq4
Output: 19 [12+3+4]
Solution Approach
Given a string made up of numbers, alphabets, and other special characters. But, we need to collect all the numbers present and print their sum. We can start iterating through each character in the string and add them if it’s a number and this can be done easily as shown below
isdigit(character)
sum+=int(character)
But, What if the string contains continuous numbers?
In AB12C4
we can’t just add 1+2+4
Instead, we should add 12+4
And to do that, we need to check whether the next character is also a number and then proceed to addition.
Pseudocode
- Iterate through all characters in the String
- If it’s a number save it
- If the next character is also a number save it
- If the next character is not a number
- Combine all the saved numbers and Add
Code
Sum of Numbers in a String C++
#include <iostream>
using namespace std;
// Sum of Numbers in a String
int NumSum(string str)
{
string temp = "";
int sum = 0;
//iterate through the whole string
for (char ch : str)
{
//keeps collecting continous numbers
if (isdigit(ch))
temp += ch;
else
{
//atoi convers a string of numbers to integer
// 20 is converted to 20
sum += atoi(temp.c_str());
temp = "";
}
}
return sum + atoi(temp.c_str());
}
int main()
{
string str ="matrix10read20dot20com50";
cout << NumSum(str);
return 0;
}
Output
100
Conclusion
Sum of Numbers in a String – Strings can get a lot complex, especially in special cases however, as long as we iterate and evaluate each character carefully we are in control. This post is a part of my #30DaysChallenge to write a blog post every day on what I learn.
Cheers ~ Abhiram Reddy.