关于在C/C++中对于输入以换行结束的一些问题

本文详细介绍了在在线评测系统(OJ)中遇到的问题,即如何在输入数据为多行时正确判断一行数据的结束。通过使用`cin`和字符串操作,实现了对多行数据的有效处理,解决了数据输入判断难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两天在做一些OJ的题,题目一般都会要求测试的数据有很多组,每组都是一行,但是如果不是所有的测试数据输入完成的话,那么用(scanf(“%d”,&data)!= EOF)是没办法判断一行数据输入完成的,我还为此很纠结。cin 和scanf的输入我自己试了之后一直没解决这个问题。之后在博主:


吃苹果阿 里面看到一道题目的做法,瞬间感觉到好像问题解决了。对于一组测试数据(一行数组),他的解决办法是:先将整个一行数组作为字符串读入,之后再用一个函数将字符串转为数组。实际代码如下:

<pre class="cpp" name="code">int* ChangeToInt(char* s)
{
	int len = strlen(s);
	int flag = 1;
	int temp = 0;
	int a[21];
	int n = 0;
	for (int i = 0;i < len;i++)
	{
		if (s[i] == '-')
			flag = -1;
		else if (s[i] == ' ')//a data is over
		{
			if (flag == -1)
				temp = temp*flag;
			a[n++] = temp;
			flag = 1;
			temp = 0;
		}
		else
			temp = temp * 10 + (s[i] - '0');
	}
	//最后一个数字处理
	if (flag == -1)
		temp = flag*temp;
	a[n++] = temp;
	return a;
}

 当然,在 java里面有一个函数Split(‘ ’)是可以把数组直接分开的。但是可以了解了解这个内在的实现还是很好的。又解决了一个问题。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值