簡體   English   中英

計算整個字符串,包括 C 中的空格

[英]Counting the Whole String Including The Spaces in C

我正在嘗試設置一個計算整個字符串的代碼,並且在它找到的第一個空格之后不會停止。 我怎么做?

我試過這種代碼,但它只計算第一個單詞,然后顯示第一個單詞中的字母數。

到目前為止,這是我嘗試過的。

int main(){
    char get[100];
    int i, space=0, len=0, tot;
    scanf("%s", get);

    for (i=0; get[i]!='\0'; i++)
    {
        if (get[i] == ' ')
            space++;
        else 
            len++;
    }

tot = space + len;
printf("%i", tot);
}

int main(){
    char get[100];
    int len;
    scanf("%s", &get);
    len = strlen(get);
    printf("%i", len);
}

但仍然會得到與第一個相同的答案。

我預計如果輸入:狐狸是華麗的。 輸出:19

但我得到的只是輸入:狐狸很漂亮。 輸出:3

strlen已經包含空格,因為它計算字符串的長度,直到終止NUL字符(零, '\\0' )為止。

您的問題是,當scanf%s轉換遇到空格時,它會停止讀取,因此您的字符串永遠不會一開始就包含它(您可以通過打印出字符串來輕松地進行驗證)。 (您可以通過使用不同的scanf轉換來修復它,但通常,通過使用fgets讀取可以更輕松地完成操作-它還會強制您指定緩沖區大小,從而修復當前代碼中潛在的緩沖區溢出。)

Arkku答案在診斷中是正確的。 但是,如果您希望使用scanf,則可以執行以下操作:

scanf("%99[^\n]", get);

99告訴scanf讀取的字符不能超過99個,因此您的get緩沖區不會溢出。 [^\\n]告訴scanf讀取任何字符,直到遇到換行符為止(按回車鍵時)。

正如Chux指出的那樣,該代碼仍然存在2個問題。

使用scanf時,最好檢查它的返回值,這是它可以讀取的項目數。 同樣,使用上述語法時, \\n實際上仍保留在輸入緩沖區中。 因此,您可以這樣做:

if(scanf("%99[^\n]", get) == 0){
    get[0] = 0; //Put in a NUL terminator if scanf read nothing
}

getchar();      //Remove the newline character from the input buffer

我將舉一個例子來解釋這個概念。

main()
{
  char s[20], i;

  scanf("%[^\n]", &s);
    while(s[i] != '\0') {
       i++;
   }
  printf("%d", i);

  return 0;
}

我用過 c 語言,你可以遍歷字符串的結尾部分,你會得到長度。 這里我使用了“EDIT SET CONVESRION METHOD”來讀取字符串,您也可以讀取。

暫無
暫無

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

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