我需要一些从字符串中提取单词的帮助。该字符串将从文件中获取,因此我不知道该单词的位置或它的长度。例如,下面的字符串。如何在不知道单词有多长的情况下将(' how)取出并存储在字符串中?它可能是谷歌或者杜克电影等。
string text = "hi there, 'how are you today?" ;
string apWord = {" '"} ;
int wstart = text.find(apWord) +1 ;
string word ;
word = text.substr(wstart, /*???*/ ) ;
cout << word << endl ;
如果我把字符数放在substr / ??? /中就行了,但问题是我不知道怎么弄清楚从空间到空间抓住这个字的字符数。并且进一步使问题复杂化的是,&#39; /&#39; &#39;可能在这个词的中间,例如kit&ty; ty。
string ouch = "Why are kit'ty cats think they're above us?"
int find = text.find(" ' ") ;
我还需要能够抓住&#34; kit&#39; ty&#34;超出这个字符串,不知道这个词在哪里或多久,如果这是有道理的。这适用于以&#39;开头的单词。或包含&#39;某处。我需要能够做到这两点。困难的部分只使用字符串和功能。即,不使用istringstream或vector等。
答案 0 :(得分:0)
答案 1 :(得分:0)
我认为此功能适用于以&#39;开头的单词。其次是&#39;在中间。但不确定如何确保它不会以以&#39;
开头的单词执行此操作void apBegin(string &text)
{
string apWord = {" '"} ;
int wstart = text.find(apWord) +1 ;
int endword = 0 ;
for (unsigned int i = wstart; i < text.length(); i++)
{
if (text[i] == ' ')
{
endword = i ;
break ;
}
}
string word = text.substr(wstart, endword - wstart ) ;
word.erase(0, 1);
word += "\' ";
return ;
}
void apMiddle(string &text)
{
string text = "once upon a time there were many 'dragons and cats!" ;
string ap ={"'"} ;
int location1 = text.find(ap) ;
int startword = 0, endword = 0 ;
for (unsigned int i = location1; i < text.length(); i++)
{
if (text[i] == ' ')
{
endword = i ;
break ;
}
}
for (unsigned int i = location1; i >0; i--)
{
if (text[i] == ' ')
{
startword = i + 1;
break ;
}
}
string otherWord = text.substr(startword, endword - startword) ;
int found = otherWord.find(ap) ;
otherWord.erase(found, 1) ;
otherWord.insert(found + 1, "'") ; // moves ' one to the right.
}