簡體   English   中英

如何使用scanf函數獲取字符串長度

[英]How to get string length using scanf function

如何在不使用strlen函數或計數器的情況下獲取字符串長度,例如:

scanf("???",&len);
printf("%d",len);

輸入: abcde

預期輸出: 5

您可以使用賦值抑制(字符* )和%n將消耗的字符數存儲到 int 值中:

 int count;
 scanf( "%*s%n", &count );
 printf( "string length: %d\n", count );

解釋:

%*s將解析一個字符串(直到第一個空格字符),但由於*不會存儲它。 然后%n會將消耗的字符數(即解析的字符串的長度)存儲到count

請注意, %n不一定計入scanf()的返回值:

C 標准說:“執行 %n 指令不會增加執行完成時返回的賦值計數”,但勘誤表似乎與此相矛盾。 最好不要對 %n 轉換對返回值的影響做出任何假設。

引用自手冊頁,您也可以在其中找到有關scanf()所有其他信息。

使用%n格式說明得到字符的消耗量到目前為止,並將其寫入len類型的int

char buf[50];
int len;

if ( scanf("%49s%n", buf, &len) != 1 )
{
     // error routine.
}

printf("%d", len);

您可以使用n說明符執行此操作:

%n返回到目前為止讀取的字符數。

char str[20];
int len;
scanf("%s%n", &str, &len);

說明:這里[]用作掃描集字符^\\n使用空格輸入直到遇到新行。 對於整個字符串的長度計算,我們可以使用 C 中的標志字符,其中%n不期望任何內容,相反,到目前為止從輸入消耗的字符數通過下一個指針存儲,該指針必須是指向 int 的指針。 這不是轉換,盡管它可以用*flag抑制。 這里加載對應參數指向的變量,其值等於 scanf() 在出現%n之前掃描的字符

通過使用這種技術,我們可以在運行時加速我們的程序,而不是使用 strlen() 或 O(n) 計數的循環。

scanf("%[^\n]%n",str,&len);
printf("%s %i",str,len);

暫無
暫無

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

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