给定一个字符串,求其中连续数字所组成的数的总和
问题陈述
We have given a string str containing the numeric and alphabetical characters. We need to find the sum of all numbers represented by a continuous sequence of digits available in the given string.
示例示例
Input
str = “12were43”
输出
55
Explanation
The sum of 12 and 43 is equal to 55.
Input
str = “1a2c3d”
输出
6
Explanation
1、2和3的和为6。
Input
str = “werderfrewsf”
输出
0
Explanation
It gives 0 in the output as the string contains no digit.
我们解决问题的逻辑是从给定的字符串中提取所有数字并求和。
方法一
In this approach, we will use isDigit() method to check whether the current character is a digit. Also, we multiply the current value of the number by 10 and add the current character to the number if the current character is a digit.
算法
步骤 1 - 将 'number' 和 'sum' 变量初始化为零。
Step 2 − Iterate through the string and check current character is between 0-9 using the isDigit() method.
步骤 3 - 如果当前字符是数字,则将数字值乘以10,并加上当前数字值。
第四步 - 如果当前字符不是数字,则将“number”变量的值添加到“sum”变量中,并将“number”变量的值更新为零。
Step 5 − Once the iteration of the loop completes, add the value of the ‘number’ to the ‘sum’ variable and return the value of the sum variable.
Example
#include <bits/stdc++.h> using namespace std; // function to return the sum of the consecutive number present in the string int getSumOfDigits(string str){ // store the current number int number = 0; // Stores total sum int sum = 0; // Traverse the string for (auto &ch : str){ // If the current character is between '0' and '9', append it to the number if (isdigit(ch)) { number = number * 10 + ch - '0'; } else { // if the current character is not between '0' and '9', add 'number' to the sum and reset 'number' sum += number; number = 0; } } // if the number is greater than 0, add it to sum sum += number; return sum; } int main(){ string str = "6we24er5rd6"; cout << "The sum of consecutive digits in the given string is - " << getSumOfDigits(str); return 0; }
输出
The sum of consecutive digits in the given string is - 41
时间复杂度 - O(n),因为我们只使用了一个循环。
空间复杂度 − O(1),因为我们不使用任何额外的空间。
Approach 2
In this approach, we use the ASCII values of the character to check whether the current character is a digit. Also, we append characters to the ‘number’ variable until we get digits in the string and use the atoi() method to extract the number from the string.
算法
步骤1 - 定义'number'变量并将其初始化为空字符串。同时,定义'sum'变量并将其初始化为0。
Step 2 − Use for loop to traverse the string and get each character of the string.
步骤 3 - 如果 c-‘0’ 大于等于零且小于等于 9,则表示当前字符是一个数字。
Step 4 − If the current character is a digit, append it to the ‘number’ string.
Step 5 − If the current character is not a digit, use the c_str() method to convert the number string to a character array and pass it as a parameter of the atoi() method to convert the string to a number. Also, update the number string with the “” value.
The atoi() method returns a number if the string is convertible to a number; Otherwise, it returns zero.
Step 6 − Once the iteration of for loop completes, again use the atoi() method to convert the string to a number and add to the sum value.
Example
#include <bits/stdc++.h> using namespace std; // function to return the sum of the consecutive numbers present in the string int getSumOfDigits(string str){ string number = ""; // to store the sum of all the consecutive numbers int sum = 0; // traverse the string for (char c : str){ // if the current character is between 0 to 9 if (c - '0' >= 0 && c - '0' <= 9){ // append it to the number string number += c; } // if the current character is an alphabet else { // convert string to an array of characters and pass it to atoi() function sum += atoi(number.c_str()); // reset temporary string to empty number = ""; } } // if the number is greater than 0, add it to sum sum += atoi(number.c_str()); return sum; } int main(){ string str = "11aa32bbb5"; cout << "The sum of consecutive digits in the given string is - " << getSumOfDigits(str); return 0; }
输出
The sum of consecutive digits in the given string is - 48
时间复杂度 - O(N)
空间复杂度 − O(1)
方法三
在这种方法中,我们使用正则表达式来找到所有数字的匹配项。之后,我们可以将字符串转换为数字并将其添加到sum变量中。
算法
Step 1 − Define the regex pattern.
Step 2 − Use the regex_search() method to find the match for the number string.
Step 3 − Make iterations using a while loop as long as we find matches.
Step 4 − In the while loop, use the stoi() method to convert the string to a number and add it to the sum variable.
第5步 - 同样,使用match().suffix()方法更新字符串。这样我们就不会得到重复的匹配。
Example
#include <bits/stdc++.h> using namespace std; // Function to calculate the sum of the numbers found in the string int getSumOfDigits(string str){ // regex pattern to find the numbers in the string regex pattern("d+"); smatch match; // variable to store the sum of the numbers int sum = 0; // using the regex_search() function to find the numbers while (regex_search(str, match, pattern)){ // adding the numbers to the sum variable sum += stoi(match[0].str()); // update the string str = match.suffix().str(); } return sum; } int main(){ // input alphanumeric string string str = "abc23@12"; cout << "The sum of consecutive digits in the given string is - " << getSumOfDigits(str); return 0; }
输出
The sum of consecutive digits in the given string is - 0
Time complexity − O(N), as regex finds matches by iterating through the string.
空间复杂度 − O(1)
Conclusion
我们学习了三种不同的方法来找到字符串中连续数字的和。最后一种方法是最优化的代码,因为它使用了正则表达式。然而,对于初学者来说,使用正则表达式可能会很困难。
以上是给定一个字符串,求其中连续数字所组成的数的总和的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP中int类型转字符串的方法详解在PHP开发中,经常会遇到将int类型转换为字符串类型的需求。这种转换可以通过多种方式实现,本文将详细介绍几种常用的方法,并附带具体的代码示例来帮助读者更好地理解。一、使用PHP内置函数strval()PHP提供了一个内置函数strval(),可以将不同类型的变量转换为字符串类型。当我们需要将int类型转换为字符串类型时,

1、首先打开pycharm,进入到pycharm主页。2、然后新建python脚本,右键--点击new--点击pythonfile。3、输入一段字符串,代码:s="-"。4、接着需要把字符串里面的符号重复20次,代码:s1=s*20。5、输入打印输出代码,代码:print(s1)。6、最后运行脚本,在最底部会看到我们的返回值:-就重复了20次。

Go语言是一种强大且灵活的编程语言,它提供了丰富的字符串处理功能,包括字符串截取。在Go语言中,我们可以使用切片(slice)来截取字符串。接下来,将详细介绍如何在Go语言中截取字符串,并附上具体的代码示例。一、使用切片截取字符串在Go语言中,可以使用切片表达式来截取字符串的一部分。切片表达式的语法如下:slice:=str[start:end]其中,s

标题:Golang中判断字符串是否以指定字符结尾的方法在Go语言中,有时候我们需要判断一个字符串是否以特定的字符结尾,这在处理字符串时十分常见。本文将介绍如何使用Go语言来实现这一功能,同时提供代码示例供大家参考。首先,让我们来看一下Golang中如何判断一个字符串是否以指定字符结尾的方法。Golang中的字符串可以通过索引来获取其中的字符,而字符串的长度可

Golang中如何检查字符串是否以特定字符开头?在使用Golang编程时,经常会遇到需要检查一个字符串是否以特定字符开头的情况。针对这一需求,我们可以使用Golang中的strings包提供的函数来实现。接下来将详细介绍如何使用Golang检查字符串是否以特定字符开头,并附上具体的代码示例。在Golang中,我们可以使用strings包中的HasPrefix

GoLang中的字符串虽然不可变,但可通过以下技术动态修改:使用字符串连接符连接字符串。使用字符串格式化创建新字符串。修改字符串底层字节切片。使用第三方库提供的可变字符串类型。

PHP字符串操作:去除多余逗号,保留唯一逗号实现技巧在PHP开发中,字符串处理是一个非常常见的需求。有时候我们需要对字符串进行处理,去除多余的逗号,保留唯一的逗号。在这篇文章中,我将介绍一种实现技巧,并提供具体的代码示例。首先,我们来看一个常见的需求:假设我们有一个包含多个逗号的字符串,我们需要去除多余的逗号,只保留唯一的逗号。例如,将"apple,ba

PHP作为一种广泛应用于开发Web应用程序的脚本语言,其字符串处理功能十分强大。在日常开发中,经常会遇到需要删除字符串的操作,特别是删除字符串的最后两个字符。本文将介绍两种PHP实现删除字符串最后两个字符的技巧,并提供具体的代码示例。技巧一:使用substr函数PHP中的substr函数用于返回字符串的一部分。通过指定字符串和起始位置,我们可以轻松地删除字符
