[英]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); });
不過有兩個注意事項:
std::isspace()
不能立即與char
一起使用,因為char
可能已簽名,並且std::isspace()
采用一個必須為正數的int
。 可能是您的循環。 您將從i = 0轉到i = c,但是i = c太遠了。 您應該轉到i = c-1:
for ( i=0; i<c; i++)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.