湖大2020年计算机学院研究生复试题目:输出字符串中第一个出现的,连续的数字作为一个整数返回,若没有数字出现,返回0

湖大2020年计算机学院研究生复试题目

编写一个函数FirstInt,功能是将字符串中第一个出现的,连续的数字作为一个整数返回,若没有数字出现,返回0。
/***************************************************
****将字符串中第一个出现的连续的数字作为整数返回****
***************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;

#define N 50

int main()
{
	int len = 0;
	int len1 = 0;
	char str[N];												//定义原始字符数组
	char str1[N];												//定义存储数字字符的数组
	cout<<"please input the string: "<<endl;
	while((cin.peek()!=EOF)&&(cin.peek()!='\n')&&len<N)			//键盘上输入回车表示字符输入完成
		{
		cin>>str[len];
		len++;													//记录str字符数组的长度
	}
	cout<<"The string is:"<<endl;
	for(int i=0;i<=len;i++)										//输出str字符数组
		cout<<str[i];
	cout<<endl;	
	/*********************************************************
	设置一个标志flag,当字符数组中出现数字时标志位置1,
	当字符数组中出现非数字的字符且标志位为1时代表查找结束
	*********************************************************/
	int flag = 0;												
	int j = 0;
	int sum = 0;
	int tmp = 1;												//存储字符需要乘的数字,如数字有3个,第一个数字要乘以100,第二个乘以10,第三个乘以1
	for(i=0; i<len; i++)
	{
		if((str[i]>='0') && (str[i]<='9') && (flag==0))
		{
			flag = 1;											//第一次查找到数字时,将标志位置为1
			str1[j] = str[i];
			j++;
		}
		else if((str[i]>='0') && (str[i]<='9') && (flag==1))	//连续找到的数字依次存入数组str1中
		{
			str1[j] = str[i];
			j++;												//记录str1数组的长度
		}
		else if(((str[i]<'0') || (str[i]>'9')) && (flag==1))	//代表查找结束
		{
			cout<<"the number string is: "<<endl;				//输出截取出的数字字符数组
			for(i = 0; i<j;i++)
			{
				cout<<str1[i];
			}
			cout<<endl;
			len1 = j;											//len1存储str1的长度
			for(j = 0; j<len1; j++)
			{
				tmp = 1;										
				for(int k = len1-j-1; k > 0; k--)
					tmp = tmp*10;
				tmp*=(str1[j]-'0');
				sum+=tmp;
			}
			cout<<"sum = "<<sum<<endl;
			cout<<endl;
 			exit(0);
		}		
	}
	cout<<"sum = "<<sum<<endl;									//没有找到输入的数字时返回0
	system("pause");
	return 0;
}

运行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值