基本思想
设字符串为str,当前扫描起始位置为i,末位为j,和计作sum,初始为0;
1、从i=0开始扫描str,如果不是数字行字符,跳过;否则,标记当前位置为i,并找到连续的数字字符的最后一位,标记为j,根据j-i确定次方数,进而求出数字,并和sum相加;
2、确定一个数字后,此时j的下一位非数字字符,因此下一次从j的下一位开始扫描,即i=j+1;
3、当str[j]='\0',扫描完成,程序结束;
代码
bool IsNum(char c) {
if (c >= '0' && c <= '9') {
return true;
}
return false;
}
int SumNumInString(char *string) {
int sum = 0, i = 0, j = 0;
while (string[j] != '\0') {
while (!IsNum(string[i])) {
if (string[i] == '\0') {
return sum;
}
i++;
}
j = i;
while (IsNum(string[j])) {
j++;
}
for (int k = i; k < j; ++k) {
sum += (string[k] - '0') * (int) pow(10, j - k - 1);
}
i = j;
}
return sum;
}
执行
int main() {
char string[50] = "31abc12dc345er12";
int data = SumNumInString(string);
printf("数字之和为:%2d", data);
return 0;
}