2011-11-05 16 views
-2

其實我需要處理的情況怎麼樣如何從一個字符串

我應該給輸入作爲rows <n>「行」和數字<n>或任何單個非數字字符之間 應該有空格分隔的數字。

我應該能夠該字符串分出一部分,並把它分配給一個char變量和數字部分爲INT ...

字符串部分應然後驗證其是否正確的命令或不..如果輸入錯誤的命令,如「ada aad 99」或「adaha 9」或「adfad9」。它應該說「錯誤的命令」。

我試圖用strtok(),但那裏沒有在字符串之間NULL它不能處理字符串。我試着使用$ sscanf(string,"%s %*c %d",str, &num); 但它甚至沒有工作了所有的可能性。

我該怎麼辦?

+5

你的個人資料說瘋狂的編程,但你在實踐中懶惰。基本上,你只是要求我們爲你寫一個程序。好吧,如果沒有任何可以完成這項工作的內置函數對你來說,你爲什麼不嘗試爲它編寫自己的代碼? –

+0

好吧,答案是「找到空間」。一旦你找到了空間,你就知道這個詞應該在它的左邊,而數字在右邊。 – wildplasser

回答

1

我沒有看到你的問題與strtok,這將是完美的,在這種情況下,我認爲。

在僞碼:

line = getline(); 
split_line_into_tokens(line); 
if tokens[0] == "command1" { 
    if tokens_num > 2 { 
     error("to many arguments to command1"); 
    } else if tokens_num < 2 { 
     error("command1 needs one argument"); 
    } else { 
     do_command_1(tokens[1]); 
    } 
} else { 
    error("unknown command"); 
} 

在上述僞代碼中,split_line_into_tokens()使用strtok創建的令牌陣列,使用空間作爲分隔符。如果strtok返回一個空字符串(而不是NULL),則會使用多個空間並跳過該空間。 split_line_into_tokens創建tokens數組,其中第一個條目包含命令,其餘包含參數。變量tokens_num設置爲數組中的令牌數量。

0

我認爲strtok()正是你在這裏所需要的。如果你的程序是多線程的,你可能需要使用strtok_r()。一旦你隔離第二個令牌,你需要使用atoi()strtol()(或其中一個相似的函數)來解析它作爲一個數字。