[英]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.