2017-04-21 218 views
0

我一直卡在這一段時間。我試圖從文件中讀取一個字符串。 該字符串包含註釋(A,G,C,B等),後面可能有某些值。例如,當一個音符後面跟着'〜'時,音符已經在其音長上加了20(A ~~將40增加到預設的音長)。其他可能的輸入: A(4)應該改變頻率+4。 B#應該改變頻率+20。從文件中讀取字符串

輸入會是這個樣子:B(4)〜F#(5)~~~機管局

我開始通過執行以下操作,但我似乎無法弄清楚如何遞增的頻率與每個附加'〜'後注。

string a; 
for (int i = 0; i < a.length(); a++) 
{ 
    if(a.at(i) == 'C') 
    { 
     frequency = 440; 
     duration = 10; 

     if(a.at(i++) == '~') 
     { 
      frequency += 20; 
     } 
    } 
Values(frequency, duration) 

} 
+0

請清楚提及您的要求。 – sjsam

回答

0

您的循環中檢查'〜'的點只有在a.at(i)== C時纔會達到,並且只能測試i ++。在=='〜'的條件下添加一個循環:

if(a.at(i++) == '~'){ 
    while(a.at(i) == '~'){ 
     frequency += 20; 
     i++; 
    } 
} 
+0

謝謝!這很好。我唯一的問題是如何不斷地運行不同的值(〜,#,(4)等),直到達到另一個音符。一旦達到下一個音符,函數應該如何返回? – borchr

+0

如果您可以安全地假設所有「筆記」都是字母的,並且只有「筆記」是字母的,則可以使用內置函數isalpha()來執行此操作。如果參數是字母字符,則isalpha(a.at(i))將返回true。爲了更加清楚:在需要的地方添加條件&&!isalpha(a.at(i)),以便在到達「音符」時退出內部循環 – hulud