안녕하세요
아래 한번 봐주세요
const int BODY_UPPERCASE_SCORE = 40;
const int BODY_SPECIALWORD_SCORE =5;
string extractWord(string& text)
{
{
{
int i, flag = 0, j = 0;
string firstword = "";
if (text == "")return "";
for (i = 0; i<text.size(); i++) //처음부터 문자 끝까지 루프를 돌면서
{
if (isalpha(text[i])) //알파벳을 만나면
{
firstword.append(text, i, 1);
flag = 1; //첫번째 단어 찾음 표시
j++;
}
else if (flag == 1) //단어를 찾았고.. 알파벳이 아니면.. for문 스탑
break;
}
text.erase(0, i);
return firstword;
}
}
return "";
}
string makeUppercase(string text)
{
for (int i = 0; i < text.size(); i++) //문자열의 길이만큼 루프를 돕니다.
{
text[i] = toupper(text[i]); //i번째 요소를 대문자로 바꿉니다.
}
return text; //바뀐 문자열을 리턴합니다
}
-----------------
위 function 들을 사용하여 아래 function 들을 제대로 만들고 싶습니다. 우선 아래 void 에 제가 만들어야 하는것은 string text 안에 BUY, CHEAP, DIPLOMA 같은 단어들이 있는지, 있으면 몇개 있는지 확인해야하고 또 총 단어수와 그중 몇단어가 대문자로된 단어 인지 세어야 합니다 .제가 하려는 buy, cheap 이런 단어 들이 소문자로 되어 있을수도 있은 makeUpper function 을 이용하여 대문자로 만들고 비교하여 몇개가 있는지 세고 싶은데 잘 안되네요 ㅜㅜ
그리고 이것을 이용해 맨 아래 있는 int BodyScore function 에 대문자단어수/총단어수 >= 50 (즉 대문자가 50프로 이상이면) BODY_UPPERCASE_SCORE = 40; 를 리턴, 그리고 BUY, CHEAP 같은 단어들은 한개당 BODY_SPECIALWORD_SCORE =5; 를 리턴 하고 싶습니다.
아래는 제가 function 넣어 만든것인데 void 와 int bodyscore 이 제가 원하는대로 나오지 않아요.. ㅠㅠ string buy, cheap 이런것을은 숫자가 세지지도 않구여
어떻게 해야하나요
-------------------
void analyzeBodyLine(string text, int& nWords, int& nUppercaseWords, int& nSpecialWords)
{
string BUY, CHEAP, DIPLOMA, ENLARGE, FREE, LONELY, MONEY, NOW, OFFER, ONLY, PILLS;
string test;
test = extractWord(text);
string s;
s = makeUppercase(text);
while (test != "")
{
nWords++;
if (isUppercase(test))
nUppercaseWords++;
test = extractWord(text);
}
while (text != "")
{
test = extractWord(text);
s = makeUppercase(text);
if (text == "BUY" || text == "CHEAP" || text == "DIPLOMA" || text == "ENLARGE" || text == "FREE" || text == "LONELY" || text == "MONEY" || text == "NOW" || text =="OFFER" || text == "ONLY" || text == "PILLS")
nSpecialWords++;
}
}
int bodyScore(int nWords, int nUppercaseWords, int nSpecialWords)
{
int spamScore = 0;
if ((nWords != 0) && ((nUppercaseWords * 100) / nWords) >= 50)
spamScore += BODY_UPPERCASE_SCORE;
spamScore = spamScore + (BODY_SPECIALWORD_SCORE * nSpecialWords);
return spamScore;
}
감사합니다.
댓글 0