我的計劃是不兼容的隱式聲明
#include <iostream>
char * grabNumber (char * begin)
{
// Interpret *begin as the start of a double and add the characters to a
// string retstr
char * begincpy = begin;
int foundDot = 0;
while ((*begin >= '0' && *begin <= '9') || *begin == '.')
{
if (*begin == '.')
{
if (foundDot == 0) foundDot = 1;
else break;
}
++begin;
}
long n = begin - begincpy; // # of characters parsed
char * retstr = malloc(sizeof(char) * (n + 1)); // string to be returned
for (long k = 0; k < n; ++k) retstr[k] = *begincpy++;
retstr[n] = '\0';
return retstr;
}
int main()
{
char str [] = "abc3.14def";
std::cout << grabNumber(str+3); // should print "3.14"
return 0;
}
和我得到的錯誤是
Line 20: warning: incompatible implicit declaration of built-in function 'malloc' Line 21: error: 'for' loop initial declaration used outside C99 mode
對應2線
char * retstr = malloc(sizeof(char) * (n + 1)); // string to be returned
for (long k = 0; k < n; ++k) retstr[k] = *begincpy++;
參見:http://codepad.org/c2tNGFEo
另外,有沒有一種方法可以減少我的算法的冗餘,因爲它在while
循環的每次迭代中檢查.
兩次,但我想不出更清晰的方法來處理這個事實我需要停止循環,如果我們碰到第二個.
'std :: cout'在C中是非法的。這是否意味着C++的問題? –
在這個網站上最好堅持每個問題一個問題。發佈一個關於算法效率的單獨問題,一旦你得到它的運行並給出正確的輸出。 –
@MattMcNabb我現在已經運行並獲得正確的輸出 –