如何从流中首先读取N个数字作为整数?
从流和整数N
,我必须得到由N
流的第一个数字字符表示的整数。如何从流中首先读取N个数字作为整数?
下面是一些例子:
/*------------------------------------------------*/
/* N | Stream content | Expected value */
/*-----|-------------------------|----------------*/
/* 2 | 123a52test | 12 (int) */
/* 2 | 123552a52test | 12 (int) */
/* 2 | 12test | 12 (int) */
/* 2 | 12 | 12 (int) */
/* 4 | 123552a52test | 1235 (int) */
/* 4 | 122a52test | -error- */
是否有一个直接的解决方案做这样的事情,或做我必须做以下?
- 构建从N个字符的字符串
- 创建一个字符串流,并用它来提取整数
有没有内置的方式在C++中执行此操作。但是,您可以'精确读取'N个字符,然后将它们转换为整数。
char number[N];
stream.read(number,N);
return atoi(number); // or stringstream ss; ss << number; ss >> ret; return ret;
除非'N'是一个常数'字符数[N];'每个标准都是非法的。 – NathanOliver
在我的例子中,'N'不是一个常量,但是我知道它可以使用的最大值'Nmax',所以上面的解决方案适用于'char数[Nmax]'。 – Silverspur
更不用说它也适用于char * number = new char [N]; stream.read(数,N); int retval = atoi(number);*(数)'。 – LambdaBeta
你可以使用一个简单的循环是这样的:
for (int i = 0; i < N; i++) {
if (isdigit(stream[N])) {
out*=10;
out+=stream[N]
} else {
err = 1; // error flag;
break;
}
}
我不明白为什么你需要从字符串转换为'int',如果你只是需要显示的值。只要确保字符串的N个第一个数字形成一个有效的“int”(单个+或 - 在开始处和仅有数字处)。 – NathanOliver
什么是*流*?它是'istream&'? – krzaq
@NathanOliver我不想显示值,我需要把它作为一个整数进行进一步处理。 – Silverspur