2015-02-05 61 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

通过你的定义,一个字符是一个单词的第一个字符,如果它是字母数字要么是字符串中的第一个字符之前的字符不是字母数字。

相关问题