2016-10-04 46 views
0

从流和整数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-  */ 

是否有一个直接的解决方案做这样的事情,或做我必须做以下?

  1. 构建从N个字符的字符串
  2. 创建一个字符串流,并用它来提取整数
+0

我不明白为什么你需要从字符串转换为'int',如果你只是需要显示的值。只要确保字符串的N个第一个数字形成一个有效的“int”(单个+或 - 在开始处和仅有数字处)。 – NathanOliver

+0

什么是*流*?它是'istream&'? – krzaq

+0

@NathanOliver我不想显示值,我需要把它作为一个整数进行进一步处理。 – Silverspur

回答

1

有没有内置的方式在C++中执行此操作。但是,您可以'精确读取'N个字符,然后将它们转换为整数。

char number[N]; 
stream.read(number,N); 
return atoi(number); // or stringstream ss; ss << number; ss >> ret; return ret; 
+0

除非'N'是一个常数'字符数[N];'每个标准都是非法的。 – NathanOliver

+0

在我的例子中,'N'不是一个常量,但是我知道它可以使用的最大值'Nmax',所以上面的解决方案适用于'char数[Nmax]'。 – Silverspur

+0

更不用说它也适用于char * number = new char [N]; stream.read(数,N); int retval = atoi(number);自由(数)'。 – LambdaBeta

0

你可以使用一个简单的循环是这样的:

for (int i = 0; i < N; i++) { 
    if (isdigit(stream[N])) { 
     out*=10; 
     out+=stream[N] 
    } else { 
     err = 1; // error flag; 
     break; 
    } 
}