用字串存盤一些英文單詞,例如:“FORBES The CEO of Boloco's Social Media Strategy”。
輸出其中全為大寫字母組成的單詞,并計算其個數。
希望能得到一些代碼或好的思路
這道題的個數計算并不困難,主要是如何判斷全為大寫字母組成的單詞;
我的思路:
1. 先找到字串中第一個空格的位置(確定單詞)
2. 記錄空格位置,并通過回圈判斷其中元素是否都為大寫,若都為大寫,則輸出,并將個數+1;若不為大寫,則跳出回圈;
3. 繼續執行,找到下一個空格位置
uj5u.com熱心網友回復:
先確定單詞,然后遍歷單詞,判斷是否有小寫字符。uj5u.com熱心網友回復:
我認為最后判斷應該是:是否全為大寫字符uj5u.com熱心網友回復:
我也認為應該先確定單詞,在檢查單詞是否全部為大寫。uj5u.com熱心網友回復:
很簡單的詞法分析器,有窮自動狀態機。。效率是最高的,沒有之一。
public enum MachineState
{
START,
UPPER_WORDS,
}
public int GetUpperWordsCount( string p )
{
MachineState state = MachineState.START;
int count = 0;
foreach( char c in p )
{
switch( state )
{
case MatchineState.START:
if( c >= 'A' && c <='Z' )
state = MachineState.UPPER_WORDS;
break;
case MatchineState.UPPER_WORDS:
if( c == ' ' || c == '\t' || c == '\r' || c == '\n' || c == ',' || c == '.' )
{
++count;
state = MatchineState.START;
}
else if( c>='A' && c <= 'Z' )
break;
else
state = MatchineState.START;
break;
}
}
}
uj5u.com熱心網友回復:
好人做到底,給你完善一下代碼吧:
// 狀態機 三種狀態
public enum MachineState
{
START,
UPPER_WORDS,
NOTUPPER_WORDS
}
// 判斷一個字符是否為空白
private bool IsSpace( char c )
{
return ( c == ' ' || c == '\t' || c == '\r' || c == '\n' );
}
// 判斷一個字符是否為單詞的分隔符,可以視情況將其他標點符號加入
private bool IsSeparator( char c )
{
return IsSpace(c) || ( c == ',' || c == '.' );
}
// 判斷所有字母為大寫的單詞個數
public int GetUpperWordsCount( string p )
{
MachineState state = MachineState.START;
int count = 0;
foreach( char c in p )
{
switch( state )
{
case MachineState.START:
if( c >= 'A' && c <='Z' ) // 如果第一個字符為大寫,狀態改變
state = MachineState.UPPER_WORDS;
else if( IsSpace( c )) // 如果是空白,保持開始狀態
break;
else // 其他情況,小寫狀態
state = MachineState.NOTUPPER_WORDS;
break;
case MachineState.UPPER_WORDS:
if( IsSeparator( c )) // 如果遇到單詞分隔,計數并改狀態
{
++count;
state = MachineState.START;
}
else if( c>='A' && c <= 'Z' ) // 如果還是大寫,保持狀態
break;
else // 其他情況(單詞有不是大寫的字符),進入非大寫狀態
state = MachineState.NOTUPPER_WORDS;
break;
case MachineState.NOTUPPER_WORDS:
if( IsSeparator( c )) // 直到遇到分隔符,否則都是非大寫狀態
{
state = MachineState.START;
}
break;
}
}
}
uj5u.com熱心網友回復:
詞法分析器,有窮自動狀態機,是編譯原理中的知識,它的好處是,連續多個空白符,很容易處理,不會影響計算結果。只遍歷一遍字符,效率很高。。理解困難的話,畫一個狀態圖,就容易理解了。
uj5u.com熱心網友回復:
效率的確高,這是我C語言考試最后一道編程題里面的一部分內容,明天再好好看看您的代碼,十分感謝!之前也上過編譯原理的課,可以看出自己的確學藝不精,要好好努力!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/210297.html
標籤:C語言
上一篇:c++
下一篇:字串插入問題
