回答
使用C++的最簡單的方法是將上述
double numerator, denominator;
char dummy;
if (in >> numerator >> dummy >> denominator) {
// ...
}
讀取來自一個流的合理值。要通過命令行參數獲取流,你會使用std::istringstream
:
int main(int ac, char* av[]) {
for (int i(1); i != ac; ++i) {
std::istringstream in(av[i]);
// ...
}
}
主要缺點是分隔符可以與上面提到的提取碼事情。爲了解決這個問題了,我會使用一個slash
操縱:
std::istream& slash(std::istream& in) {
if (in.get() != '/') {
in.setstate(std::ios_base::failbit);
}
return in;
}
// ...
if (in >> numerator >> slash >> denominator) {
// ...
}
由於該解決方案似乎可以理解的,我想指出的是,根據需要,你可能要稍微調整的slash()
實現:在發佈的版本預計分子後面的斜線。它可以合理地跳過前導空白:
if ((in >> std::ws).get() != '/') {
...
}
而且,這是一個字符一個特殊的執行,你可能希望有其他字符類似的操縱。爲了避免複製代碼,機械手可以成爲一個模板:
template <char Separator>
std::istream& separator(std::istream& in) {
if ((in >> std::ws).get() != std::char_traits<char>::to_int_type(Separator) {
// ...
}
typedef std::istream& (*separator_manipulator)(std::istream&);
separator_manipulator const slash = &separator<'/'>;
separator_manipulator const comma = &separator<','>;
// ...
使用std::char_traits<char>::to_int_type()
需要的是有使用具有負值char
■當以避免出現問題。
爲manilator示例+1,因爲op要求「在命令行中」 – Les
@Les:關於命令行的好處:我添加了描述以及如何處理這個。 –
scanf
。即使在C++中,它仍然有效。請注意,變量名稱應該以小寫字母開頭。
int a, b;
scanf("%d/%d", &a, &b);
-Removed-By海報沒有用命令行完成答案。
分割字符串查找strtok的,一旦你從性病讀它像其他人證明。
代碼被刪除後沒有太多剩餘。 –
命令行參數作爲C字符串傳遞(即字符指針)。如果你有一個程序的基本框架,你已經有...
void main(int argc, char * argv[])
{ ... }
...或類似的東西。 argv數組的第一個成員(即argv [0])是一個字符指針,指向正在運行的程序的名稱。其餘的參數(argv [1] thru argv [argc-1])是命令行參數。
如果您只是在學習c/C++,那麼您應該在調試器下運行一個基本簡單的程序,通過不同的參數,引用任何帶空格的參數,使用環境變量作爲參數,以及試驗看看真正傳入的內容。
當你有這樣下來,用你的A/B作爲參數。它將是一個字符串而不是一個數字,所以你需要在「/」處進行分割。
int a, b;
scanf("%d/%d", &a, &b);
只要您的數字和斜槓都一起運行以生成一個參數,就會工作。 shell通常會用空格來分隔不同的參數。
您可以使用其他方法查找斜槓和值。你的問題的答案不一定是特定於C++。 Scanf適用於兩種c/C++。另一種簡單的方法是...
char *copyOfString = strdup(argv[1]);
char *B = strchar(copyOfString, '/');
*B = NULL;
B++;
char *A = copyOfString;
現在你有需要被轉換成整數的值的字符串形式(或浮動或雙,取決於您的要求)。當然,沒有錯誤檢查,所以如果你沒有完全正確地調用程序,程序化混亂將會隨之而來。
其他人已經發布了其他方法來做到這一點,但我希望這有助於和歡迎來到C/C++編程。請拿一本好書,試驗和錯誤到目前爲止,C/C++是非常無情的。
- 1. 在C++上聲明包含正斜槓或反斜槓
- 2. 分離路徑且用斜槓
- 3. 如何輸出正斜槓
- 4. sed用反斜槓替換正斜槓
- 5. 最終正斜槓上的拆分URL
- 6. 閱讀輸入反斜槓
- 7. 輸入日期無斜槓
- 8. 正斜槓更改爲反斜槓和正斜槓
- 9. 在json輸出中轉義正斜槓
- 10. 如何使用javascript替換正斜槓爲反斜槓和正斜槓
- 11. 在C++宏中輸出反斜槓
- 12. Wordpress正斜槓
- 13. 爲正斜槓
- 14. 何時使用正斜槓,何時不使用正斜槓?
- 15. PHP如正斜槓反斜槓?
- 16. Python將斜槓轉換爲正斜槓
- 17. 正斜槓替換爲反斜槓
- 18. Visual Studio 2010:反斜槓或正斜槓(C++)
- 19. 寫入文件:Printwriter將正斜槓轉換爲反斜槓
- 20. 「//」(正斜槓,正斜槓)在PHP路徑名中做什麼?
- 21. 反斜槓和正斜槓在Python中混合使用
- 22. 在vim中用正斜槓'/'替換反斜槓'\'
- 23. 在expr上轉義正斜槓
- 24. Javascript以正斜槓替換後斜槓和正斜槓的組合
- 25. 使用powershell輸出斜槓
- 26. AS3 - 在輸入文本中允許正向斜槓?
- 27. C#日期格式正在失去斜槓分隔
- 28. 正斜槓在XSL和XSQL
- 29. 驗證正斜槓
- 30. .htaccess的正斜槓
你能證明你已經試過了,所以我們可以在它上面工作嗎? – Grzegorz