2016-10-04 50 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; 
    } 
}