2015-05-06 24 views
0

我上的程序,需要一個數學表達式,會將其轉換成posfix符號的工作,然後解決它。如何打破一個字符串,使用與fgets讀(),使用的scanf(「%S」,..)

首先我檢查表達,看它是否被良好地形成(開放括號和括號內的閉那些相匹配)。爲了完成部分檢查,我使用fgets()來獲取字符串,因爲據我所知,它忽略了空格。

現在我必須打破字符串時空格顯示出來,但對於這部分會更容易使用同時使用的scanf("%s" ,...)

緩衝做的是有,我可以用任何方式scanf技巧打破了字符串,一部分一部分地處理int而不再讀取它?

+0

看看名氣打開,你可以用它來將字符串轉換成流。看看https://www.gnu.org/software/libc/manual/html_node/String-Streams.html – thurizas

+0

您可以用'strtok' – jiveturkey

+0

感謝您的答覆,兩個流和strtok的幫助我是肯定的。 :d – Clucluzinha

回答

1

可以使用sscanf()通過fgets()
%的正讀緩衝區推進會收到由掃描所使用的字符數。將偏移添加到偏移量將提前掃描緩衝區。

int offset = 0; 
int used = 0; 
char line[1000]; 
char item[200]; 
fgets (line, sizeof (line), stdin); 
while ((sscanf (line + offset, "%199s%n", item, &used)) == 1) { 
    offset += used; 
    // do something with item 
} 
0

可以使用緩衝器來存儲所有在第一時間使用所述與fgets讀出的數據();功能。

因此,如果表達式以及形成你已經擁有的數據,並不需要閱讀它

的算法是: 使用與fgets()來獲取表達 存放在各部分緩衝變量分離然後使用空間或如果該表達式是公形成另一個字符 ,得到緩衝 讀取與空間分離的所述緩衝器的每個部分,並把然後使用新的int變量(或陣列) 計算表達這個變量(或陣列)

看這2函數的N,它們可以幫助你

http://www.cplusplus.com/reference/string/string/find/ http://www.cplusplus.com/reference/string/string/substr/

相關問題