关于在C/C++中对于输入以换行结束的一些问题
2016-03-13 21:45
375 查看
这两天在做一些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(‘ ’)是可以把数组直接分开的。但是可以了解了解这个内在的实现还是很好的。又解决了一个问题。
吃苹果阿 里面看到一道题目的做法,瞬间感觉到好像问题解决了。对于一组测试数据(一行数组),他的解决办法是:先将整个一行数组作为字符串读入,之后再用一个函数将字符串转为数组。实际代码如下:
<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(‘ ’)是可以把数组直接分开的。但是可以了解了解这个内在的实现还是很好的。又解决了一个问题。
相关文章推荐
- 调整数组顺序使奇数在前
- C/C++ debug(二)
- c++第1次实验
- c++第一次上机报告
- 钻石型继承模型的内存分布
- C 语言基础(一)
- C语言实现顺序表
- c和c++中struct有什么不同?C++中的struct和class有什么不同?
- C++11 半同步半异步线程池的实现
- C++ / CLI 调用 C++ /Native 随记
- 随便写写C++,看看Essential C++
- 使用Euclidean法求乘法逆
- 在C语言中,static关键字的作用是什么?
- 【C++】私有数据成员不能用对象去访问吗
- C语言详解 - 枚举类型
- [C++]bitset用int数组实现
- C++学习笔记54——函数模板
- 把C语言讲的这么幽默也是厉害
- 输出由*组成的三角形
- 算法起步(1)