c语言一串字符串中提取数字并相加的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言一串字符串中提取数字并相加的问题相关的知识,希望对你有一定的参考价值。

如果给出字符串 htr475ftu8k
afda23dg56
将4758与2356相加
用函数、数组的话是这样:
#include <stdio.h>
int parse(char* a)

int n = 0;
while(*a)

if(*a >= '0' && *a <= '9')
n = n * 10 + *a - '0';
++a;


return n;

int main()

char a[123], b[123];
int x, y;
gets(a);
gets(b);
x = parse(a);
y = parse(b);
printf("%d+%d=%d\n", x, y, x + y);

但如果不用函数数组应该怎么做呢?用循环等基础语句~求教~
不要保存 直接输出就行了
。。。这个是作业

#include<stdio.h>
main()

char x;
char input1='\0';
char input2='\0';
int number1=0;
int number2=0;
printf("请输入字符串1:(输入?结束)");//输入?作为字符串1的结束符
while(x!='?')

x=getchar();
if(x=='?')
break;
input1=x;
if(input1>='0'&&input1<='9')//每检查到一个数字就要乘10,进一位
number1=number1*10+input1-'0';//比如字符'9'-'0'之后的数是数字9


x='\0';//将字符x重置值,因为原来是等于?的
printf("请输入字符串2:(输入?结束)");
while(x!='?')

x=getchar();
if(x=='?')
break;
input2=x;
if(input2>='0'&&input2<='9')
number2=number2*10+input2-'0';


printf("两串数之和为%d",number1+number2);
getch();

//没有用到数组和指针,也没有调用函数,真不明作业这么多要求。。。
//希望能帮到你
参考技术A #include <stdio.h>
void main()

char p[123], q[123],*a,*b;
int x, y,m=0,n=0;
a=gets(p);
b=gets(q);
while(*a)

if(*a >= '0' && *a <= '9')
m = m * 10 + *a - '0';
++a;

x=m;
while(*b)

if(*b >= '0' && *b <= '9')
n = n * 10 + *b - '0';
++b;

y=n;
printf("%d+%d=%d\n", x, y, x + y);

刚才试了一下,可以得出结果,祝你好运!O(∩_∩)O
参考技术B "#include<stdio.h>
main()

char
x;
char
input1='\0';
char
input2='\0';
int
number1=0;
int
number2=0;
printf("请输入字符串1:(输入?结束)");//输入?作为字符串1的结束符
while(x!='?')

x=getchar();
if(x=='?')
break;
input1=x;
if(input1>='0'&&input1<='9')//每检查到1个数字就要乘10,进一位
number1=number1*10+input1-'0';//例如字符'9'-'0'之后的数是数字9

x='\0';//将字符x重置值,由于原来是等于?的
printf("请输入字符串2:(输入?结束)");
while(x!='?')

x=getchar();
if(x=='?')
break;
input2=x;
if(input2>='0'&&input2<='9')
number2=number2*10+input2-'0';

printf("两串数之和为%d",number1+number2);
getch();
//木有用到数组和指针,也木有调出使用函数,真不明作业这么多要求。。。
//期望能帮到你"
参考技术C 既然是字符串,那要么用数组保存,要么用指针来操作,所以这个避免不了的,不用函数的话那你就直接把函数中的功能写到main函数中就好了,只是这样同样的功能代码你要写两遍,真不知道你为什么会要这样的要求 参考技术D #include
<stdio.h>
#include
"windows.h"
#define
MAX
1024
main()


char
*str1,*str2,*p;

int
i=0,k=0;

str1=(char
*)malloc(1024*sizeof(char));

str2=(char
*)malloc(1024*sizeof(char));

fflush(stdin);

gets(str1);

fflush(stdin);

gets(str2);

p=str1;

while(*p!='\0')



if(isdigit(*p))
i=i*10+*p-'0';

p++;



p=str2;

while(*p!='\0')



if(isdigit(*p))
k=k*10+*p-'0';

p++;



printf("%d\n",i+k);

free(str1);

free(str2);

用c语言或者python将文件中特定字符串后面的数字相加

从点评网爬了一些餐馆的评论
每家餐馆是一个文件,现在想统计评论数,求读取每个文件中 “评论人数:60” 中 的60并相加,求具体程序,60是个例子

代码应该不难吧。既然用爬虫爬下来了,为什么爬取数据的时候没做处理呢。

之前用过Scrapy爬虫框架,挺好用的,你可研究下。

代码:

#!coding=utf-8
import os
import re
import random

# 获取当前目录文件列表
def getNum():
    flist = os.listdir(os.getcwd())
    # 遍历文件
    for f in flist:
        if f != os.path.basename(__file__):
            with open(f, 'r') as fn:
                text = fn.read()
                num = re.findall(r'评论人数:(\\d+)', text)
                print f, num


# 文件写入测试
def test():
    for i in range(10):
        with open('%d.txt' % i, 'w') as f:
            f.write('文件:%d\\n每家餐馆是一个文件,统计评论数,求读取每个文件中 “评论人数:%d” 中 的60并相加,求具体程序,60是个例子' % (i, random.randint(1, 200)))
    print u'文件写入完毕'

if __name__ == '__main__':
    # test()
    getNum()

代码基本符合要求,但健壮性有些差。你自己用的时候修改吧

测试结果:

C:\\Python27\\python.exe D:/11/c.py
文件写入完毕
0.txt ['131']
1.txt ['181']
2.txt ['56']
3.txt ['119']
4.txt ['18']
5.txt ['103']
6.txt ['88']
7.txt ['115']
8.txt ['160']
9.txt ['136']

Process finished with exit code 0

追问

大神,文件路径怎么改?我没学过Python,代码都是别人给的。。

追答# 你把下面这句修改了
flist = os.listdir(os.getcwd())

# 改成下面的
flist = ''
print u'路径必须为全路径:如下示例'
print u'D:/test/'
flist = str(raw_input(u'输入路径,默认为当前目录'))
if list == '':
    flist = os.listdir(os.getcwd())

这样应该可以了

追问

谢谢大神了

参考技术A 1、先把字符串后面的数字截取出来,转换成数字格式即可相加。
2、C语言有atoi、atol、atof等库函数,可分别把ASCII编码的字符串转化为int、long、float类型的数字。
头文件:stdlib.h
函数原型:int atoi(const char* nptr);
(另外两个类似)

举个例子:
char *str="123";
int num=atoi(str);
执行后,num的值被初始化为123

以上是关于c语言一串字符串中提取数字并相加的问题的主要内容,如果未能解决你的问题,请参考以下文章

c语言截取字符串中的一部分

遍历一串字符并提取数字?

C语言编程题:从键盘输入一串字符,统计其中的数字与字母个数并输出

C语言字符串读取数字

c语言求数组第k大的数字

python如何在字符串中提取浮点数字并相加