2015-10-13 49 views
1

在我的項目中,我正在閱讀一個程序集文件(目前僅用於測試)。我想看看我正在閱讀的是否是標籤(我相信我的代碼很好)。如果它是一個標籤,我會通過字符獲取標籤字符的全名,並通過索引將它分配給一個字符串索引,以便我可以獲取標籤的全名以備後用。出於某種原因,當我認出我的標籤時,它只是給我第一個字符而不是整個字符串。我相信問題出現在標籤< < < endl;「。更具體地說,我的.asm文件中的第一行有一個A1標籤,所以當我cout標籤時我應該得到A1,但我只得到A.任何關於如何修復給定此代碼的建議:試圖cout一個字符串填充就像一個字符數組,但它只是cout'ing字符串中的第一個字符

#include <iostream> 
#include <fstream> 
#include <string> 
#include <map> 

using namespace std; 

int main(int argc, char* argv[]) { 
    int counter = 0; 
    char x = ' '; 
    string myFileString = " "; 
    string label = " "; 

    if (argc < 2) { 
     cout << "Error: Not enough arguments in the command line!" << endl; 
    } 
    else { 
     ifstream myFile(argv[1]); 

     if (!(myFile.is_open())) { 
      cout << "Error: Could not open the file!" << endl; 
     } 
     else { 
      while (!(myFile.eof())) { 
       getline(myFile, myFileString); 

       // Does not have a label 
       if (myFileString[0] == ' ') { 
        cout << "No label here!" << endl; 
       } 
       // Has a label 
       else { 
        while (myFileString[counter] != ' ') { 
         label[counter] = myFileString[counter]; 
         counter++; 
        } 
        cout << label << endl; 
        counter = 0; 
       } 
      } 
     } 
    } 
    cin.get(); 
    cout << endl; 
} 

回答

0

我改變了我的邏輯使用stringstream代替。這提供了一個更好,更有效的方式來解決我的問題!

if (argc < 2) { 
     cout << "Error: Not enough arguments in the command line!" << endl; 
    } 
    else { 
     ifstream myFile(argv[1]); 

     if (!(myFile.is_open())) { 
      cout << "Error: Could not open the file!" << endl; 
     } 
     else { 
      while (!(myFile.eof())) { 
       getline(myFile, line); 
       stringstream myStream(line); 

       while (myStream >> word) { 
        ... 
       } 
      } 
     } 
    } 
} 
0

要初始化您label" ",導致長1的字符串,並因此label[counter] = myFileString[counter]只有在情況下counter工作分配是0。嘗試追加一個字符到你的label,但首先你需要用""來初始化它。嘗試這樣的:

... 
string label = ""; 
... 
label += myFileString[counter]; 
+0

感謝您的回覆Maksim!當我嘗試將分配更改爲字符串標籤=「」;沒有引號之間的空格,我的Visual Studio由於某種原因而發生適應。相反,我改變了我的邏輯來使用stringstream!這使得我的整個程序變得更加簡單,我想我剛開始努力的努力:/再次感謝! – Darcendsun

相關問題