![](/img/trans.png)
[英]How to convert float number to string without losing user-entered precision in C?
[英]Splitting a user-entered String into separate tokens by white space in C
我正在嘗試逐字打印用戶輸入的字符串,或標記化。 我有:
char input [1000];
char* token;
scanf("%s", input);
token = strtok (input," ,.");
while (token != NULL){
printf("%s\n",token);
token = strtok(NULL, " ,.");
}
當我在控制台中輸入內容時,說出“ test test a two three ..”,僅輸出第一個單詞。
您使用strtok
走上了正確的路。 盡管可以使用scanf
,但是存在一個明顯的限制,即必須對計划轉換的最大字符串數進行硬編碼 。 如果您使用類似:
scanf("%s %s %s %s", string1, string2 ...
您轉換為令牌的操作將因以下原因而失敗:
one two three four five
因此,除非在編寫代碼之前確保有一定數量的字符串,否則scanf
將不起作用。 相反,與您最初的嘗試一樣,您選擇strtok
將提供處理無限數量的單詞的靈活性。
最初讀取輸入的唯一問題是選擇"%s"
的scanf
文件說明符,當遇到第一個空格時轉換停止。 如果僅將轉換說明符更改為"%[^\\n]"
您將能夠讀取字符串中的所有單詞,直到'\\n'
字符為止。 但是,在這種情況下, fgets
可以替代scanf
。 一個簡單的例子是:
#include <stdio.h>
#include <string.h>
#define MAXC 256
int main (void) {
char buf[MAXC] = {0};
char *p = buf;
printf ("\n enter words: ");
fgets (buf, MAXC, stdin);
printf ("\n tokens:\n\n");
for (p = strtok (buf, " "); p; p = strtok (NULL, " \n"))
printf (" %s\n", p);
putchar ('\n');
return 0;
}
實施例/輸出
$ ./bin/strtok_fgets
enter words: a quick brown fox jumps over the lazy dog.
tokens:
a
quick
brown
fox
jumps
over
the
lazy
dog.
如果要使用scanf
,則可以將上述fgets
替換為scanf ("%255[^\\n]", buf);
並完成同樣的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.