由於@suresh」答案是not working for me(輸出應該是asd gddf
,而不是asd asd
),我已經寫了另一個版本,這是不一樣短,但對我來說工作得很好:
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
int main(void) {
char ch;
while(scanf("%1c", &ch) == 1) { //while we have characters to read
if(isalpha(ch)) { // if the next one is alphanumeric
ungetc(ch, stdin); // we put it back
char str[101];
scanf("%100[a-zA-Z]", str); // to read the whole string (including that char)
printf("found string %s\n", str);
}
}
return 0;
}
Here是工作ideone例子。我爲這個使用stdin,但是你可以很容易地使用它來使用你打開的另一個文件。我用於scanf
(%100[a-zA-Z]]
)的格式說明符表示它應該只讀取最多包含小寫或大寫字母的100個字符(str大小)。 %1c
表示單個字符,並且unget
將字符放回到緩衝區中以避免跳過它,如果它不是符號。
編輯:as @ m-m指出,在方括號內使用-
不是標準的,在某些實現中可能不可用。如果它不適用於您,則始終可以使用%100[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]
。
你應該看看['fscanf()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fscanf.html) 上的POSIX文檔,看看它是否可用 - 諸如'%ms'中使用的'm'修飾符之類的特性有很多幫助。你應該看'掃描集'('%[...]')和'*'來壓制分配。更重要的是,您應該查看標準C ['fgets()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fgets.html)或POSIX ['getline()']( http://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html)與'sscanf()'結合使用。它通常更容易。 –
@JonathanLeffler哦。你的意思是將文件中的字符串存儲在內存中?我不認爲這是可行的,因爲我將使用非常大的文本文件的程序... – 1729
你還計劃在哪裏儲存它?它不需要使用比你打算做的更多的內存 - 如果你不幸的話,每個字符串可能多32字節。讀完並處理每一行後,您可以刪除字符串 - 否則會泄漏內存。 –