簡體   English   中英

如何在C ++中計算字符串中的空格出現次數

[英]How to count whitespace occurences in a string in c++

我有一個高級c ++類的項目,該項目應該做很多事情,但是我試圖首先專注於此功能,因為在它起作用之后,我可以對其進行調整以滿足其他需求。 此功能搜索文件並通過計算''在文檔中出現的次數來計算字數。 可能不准確,但這將是一個很好的起點。 這是我現在擁有的代碼:

void WordCount()
    {
        int count_W = 0; //Varaible to store word count, will be written to label
        int i, c = 0; //i for iterator
        ifstream fPath("F:\Project_1_Text.txt");
        FileStream input( "F:\Project_1_Text.txt", FileMode::Open, FileAccess::Read );

        StreamReader fileReader( %input );
        String ^ line;
        //char ws = ' ';
        array<Char>^ temp;

        input.Seek( 0, SeekOrigin::Begin );

        while ( ( line = fileReader.ReadLine() ) != nullptr )
            {
                Console::WriteLine( line );
                c = line->Length;
                //temp = line->ToCharArray();

                for ( i = 0; i <= c; i++)
                {
                    if ( line[i] == ' '  )
                            count_W++;
                }

                //line->ToString();
            }

        //Code to write to label
        lblWordCount->Text = count_W.ToString();
    }

除一個問題外,所有這些工作均有效。 當我嘗試運行程序並打開文件時,出現一條錯誤消息,告訴我索引超出范圍。 現在,我知道這意味着什么,但我不知道問題是如何發生的。 而且,如果我不知道是什么原因引起的,那么我將無法修復它。 我讀過,可以使用for循環搜索字符串,當然,對於char數組也是如此,並且那里有代碼可以執行該轉換,但是在兩種情況下,我都會遇到相同的錯誤。 我知道它正確地讀取了文件,因為最終程序還必須執行字符計數(正在運行),並且它從頭到尾完美地讀回目標文檔中每一行的大小。 無論如何,我沒有主意,所以我認為我應該尋求更高的權力。 有任何想法嗎?

計算空格很簡單:

int spaces = std::count_if(s.begin(), s.end(),
                           [](unsigned char c){ return std::isspace(c); });

不過有兩個注意事項:

  1. std::isspace()不能立即與char一起使用,因為char可能已簽名,並且std::isspace()采用一個必須為正數的int
  2. 這是對空格的數量進行計數,而不是單詞(或單詞-1)的數量:單詞可以由包含一個以上連續空格的空格序列分隔。

可能是您的循環。 您將從i = 0轉到i = c,但是i = c太遠了。 您應該轉到i = c-1:

for ( i=0; i<c; i++)

暫無
暫無

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

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