2015-02-05 170 views
0

看起來這應該很簡單,但我似乎無法弄清楚。我試圖編寫一個函數,如果位置pos處的字符是一個單詞的第一個字符,它將返回true。一句話它是這種情況被定義爲任何字母數字字符串。C++如何確定char是否是一個字中的第一個字符

這裏是我的最新嘗試:

bool wordBeginsAt (const std::string& message, int pos) 
{ 
string temp; 
int x; 

    for (x=pos;isAlphanumeric(message[x]==true);x++) 
    { 
     temp[x] = message[x]; 
    } 
     if (temp[pos]!=0) 
     { 
      return false; 
     } 

     else 

     return true; 

    } 

bool isAlphanumeric (char c) 
{ 
    return (c >= 'A' && c <= 'Z') 
    || (c >= 'a' && c <= 'z') 
    || (c >= '0' && c <= '9'); 
} 
+0

如果您只是對'pos'位置感興趣,爲什麼您需要for循環?此外,條件'isAlphanumeric(message [x] == true)'看起來非常錯誤... – John3136 2015-02-05 22:35:12

+1

'返回std :: isalnum(消息[pos])&&(pos == 0 ||!std :: isalnum(message [pos-1]));' – 2015-02-05 22:36:24

+0

這似乎是一個死衚衕,我試圖使用string.find(「」)和string.substr()現在....我不能相信這是功能正在退縮。 – bryan 2015-02-05 22:39:48

回答

0

那麼,isAlphanumeric(message[x]==true)應該是isAlphanumeric(message[x])==true。但是你的代碼有其他嚴重的問題,例如寫出temp的出界,並且循環邏輯全部錯誤,所以我認爲最好重新開始。

你需要做的是:

  • 檢查是否是字母數字字符
  • 檢查先前任一字符不是,或者沒有前一個字符

沒有循環或變量是必需的。第二種情況發生在pos == 0;如果你真的在看第一個字符,你不想檢查前一個字符。

+0

謝謝, if(isAlphanumeric(message [pos])== true && isAlphanumeric(message [pos-1])== false) 做了竅門。 – bryan 2015-02-06 01:01:09

+0

@bryan確保你爲'pos == 0'添加一個特殊情況 – 2015-02-06 01:05:30

2

通過你的定義,一個字符是一個單詞的第一個字符,如果它是字母數字要麼是字符串中的第一個字符之前的字符不是字母數字。

相關問題