2015-09-27 54 views
0

我試圖從文件中獲取值並查看它是int還是字符串。如果它是一個int,它應該進入tempNum var,如果它是一個字符串,它應該進入tempString var。我的代碼的其餘部分被寫入,我只需要將該值寫入正確的變量。從文件中獲取值以查看它們是int還是字符串

while (!myFile.eof()) 
{ 

    try 
    { 
     myFile >> tempNum; 
    } 
    catch (invalid_argument&) 
    { 
     myfile >> tempString; 
    } 


} 

第二次嘗試:

ifstream myFile; 
myFile.open("data.txt"); 

    while (myFile >> tempString) 
    { 
     tempNum = -1; 
     tempString = "-0"; 
     bool isInteger = true; 
     for (int i = 0; i < tempString.length(); ++i) 
     { 
      if (!isdigit(tempString[i])) 
      { 
       isInteger = false; 
       break; 
      } 
     } 
     if (isInteger) 
     { 
      tempNum = stoi(tempString); 
      if (tempNum != -1) 
      cout << tempNum; 
     } 
     if (tempString != "-0") 
     cout << tempString; 

    } 
system("pause"); 
return 0; 
+0

該文件的格式是什麼? ASCII文本?如果是這樣,我們可以假設文件中沒有字符串只包含數字嗎? –

+0

@JeremyFriesner這只是一個.txt文件,所以我會假設如此 – SaladSnake

+0

在這種情況下,只要始終以字符串的形式讀取它,然後檢查字符串以查看它是否僅由數字組成,如果是,則將其轉換爲一個帶有atoi()的int(或者你喜歡使用的任何字符串到int的轉換函數)。 –

回答

1

當你從文件中讀取,你應該讀成一個字符串:

while (fileVar >> myString) 
{ 
    // Do something with the string from file 
} 

所以,你可以測試每個個人角色來看看整體是什麼。以下是如何分隔只有int的。否則,如果需要單獨包含字母的字符串,請將「isdigit()」函數替換爲「isalpha()」,或者測試特定字符。

// Input validation (int) 
bool isInteger = true; 
for (int i = 0; i < myString.length(); ++i) 
{ 
    if (!isdigit(myString[i])) 
    { 
     isInteger = false; 
     break; 
    } 
} 
if (isInteger) 
{ 
    int myInt = stoi(myString); 
} 
+0

我試過這個,它沒有工作,我做錯了什麼?(在原來的帖子中添加代碼) – SaladSnake

+0

@SaladSnake前2個任務應該移到while循環之前。 while循環的條件只是說「雖然不是文件的結尾,請從文件中讀取下一個東西並將其分配給一個字符串」。所以,該字符串將包含下一次迭代開始時的下一個事物。 – Donald

2
if (myFile >> tempNum) { 
    // it worked as an int 
} else if (myfile >> tempString) { 
    // it worked as a string 
} 
+0

真的很簡單嗎?不會拋出一個錯誤的第一個if語句? – SaladSnake

+0

它不會拋出異常。 –

+0

它可以正常工作,但不會像文件夾中的下一個單詞那樣進入文件中的下一個單詞。 – SaladSnake

相關問題