簡體   English   中英

如何在C中讀取包含空格的字符串?

[英]How can I read a string with spaces in it in C?

scanf(“%s”,str)不會這樣做。 它會在第一個空間停止閱讀。 當字符串很大時,gets(str)也不起作用。 有任何想法嗎?

使用帶有STDIN的fgets作為文件流。 然后,您可以指定要讀取的數據量以及放置位置。

char str[100];

試試這個

 scanf("%[^\n]s",str);

或這個

fgets(str, sizeof str, stdin))

創建自己的函數來讀取一行。 這是你基本要做的事情:

1. fgets into allocated (growable) memory
2. if it was a full line you're done
3. grow the array
4. fgets more characters into the newly allocated memory
5. goto 2.

實施可能有點棘手:-)

您需要考慮需要傳遞給函數的內容(至少是數組的地址及其大小); 當一切“有效”或出現錯誤時,函數返回什么。 您需要確定什么是錯誤(字符串長度為10Gbytes,沒有'\\ n'錯誤?)。 您需要決定如何增長數組。


編輯

實際上fgetc而不是fgets可能更好

get a character
it it EOF? DONE
add to array (update length), possible growing it (update size)
is it '\n'? DONE
repeat

要讀取帶空格的字符串,您可以執行以下操作:

char name[30],ch;

i=1;
while((ch=getchar())!='\n')
{
name[i]=ch;
i++;
}
i++;
name[i]='\n';
printf("String is %s",name);

你什么時候想停止閱讀? 在EOF,特定角色,或者什么?

您可以使用%c讀取特定數量的字符

c匹配一系列寬度計數字符(默認值為1); 下一個指針必須是指向char的指針,並且必須有足夠的空間容納所有字符(不添加終止NUL)。 通常跳過前導空格被抑制。 要首先跳過空白區域,請使用格式中的顯式空格。

您可以使用%[讀取特定字符(或最多排除的字符)

[匹配指定的一組接受字符中的非空字符序列; 下一個指針必須是指向char的指針,並且字符串中的所有字符必須有足夠的空間,以及終止NUL字符。 通常跳過前導空格被抑制。 該字符串由特定集合中的字符組成(或不在其中); 該集合由開括號[字符和近括號]字符之間的字符定義。 如果開括號后面的第一個字符是旋音^,則該集合將排除這些字符。 要在組中包含一個小括號,請將其作為開括號或旋轉后的第一個字符; 任何其他位置將結束該集。 連字符 - 也很特別; 當放置在兩個其他字符之間時,它會將所有插入的字符添加到集合中。 要包含連字符,請將其設置為最后一個關閉括號之前的最后一個字符。 例如,`[^] 0-9-]'表示設置``除了緊括號,零到九和連字符'之外的所有東西。 字符串以字符的外觀結束,而不是(或者,帶有cir-cumflex,in)設置或字段寬度用完時

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM