有時候需要對用戶輸入的字符串進行處理,由於事先不知道用戶會一次性輸入多長的字符串,一般有三種處理方法:
1、根據估計用戶最多輸入字符串長度進行申請空間。
2、使用getch、scanf(%c)等一個字符一個字符的接收處理。
3、使用
while(1)
{
scanf("%1000s",&str);
....
//對str字串進行處理
...
//在末尾
if(strlen(str)!=1000)//如果長度不為1000說明已經接收完,此時可以跳出循環
break;
}
第一種方法的缺點是,用戶輸入量很有可能比程序員估計的要長。申請小了,會溢出,大了浪費。
第二種方法似乎可行,一個個字符的接收處理,直到遇到回車符為止跳出,但效率不高,每次都需要向系統的輸入緩存獲取數據需要消耗較多的時間。
第三種方法是對第二種方法的改進,一次最長獲取長度為1000的字符串,如果用戶輸入超過1000,可采用循環接收,每次接收都保存在str里,沒有增加額外的儲存空間。
顯然,第三種方法是最優的。