Я работаю над домашним заданием, и мне кажется, что я не понимаю эту функцию правильно. У кого-нибудь есть идеи, почему это не сработает для создания подстроки, состоящей из символов между двумя пробелами (слово 0, слово 1 и т. Д.)?
string extractWord(string s, int wordNum)
{
int wordIndices[10];
int i = 0;
for (int z = 0; z < s.length(); z++)
{
if (isspace(s.at(z))==true)
{
wordIndices[i] = z;
i++;
}
}
return s.substr(wordIndices[wordNum], abs(wordIndices[wordNum+1] - wordIndices[wordNum]));
}
Самый простой способ — это использовать std::istringstream
:
std::string extractWord(std::string s, int wordNum)
{
std::istringstream iss(s);
std::string word;
std::vector<std::string> words;
while(iss >> word) {
words.push_back(word);
}
return words[wordnum];
}
Знать об исключениях, возникающих при wordnum
выходит за пределы.
В этом случае перед циклом for вы должны попытаться добавить это выражение if:
if (! isspace(s.at(0))
{
wordIndices[i] = 0;
i++;
}
Проблема, с которой вы сталкиваетесь, заключается в том, что если wordNum равен 1, а пробелов нет, то для wordIndices [0] устанавливается первый пробел, который плохо работает с вашим кодом.
Кроме того, после цикла for вы должны поставить:
wordIndices[i] = s.length()
как и при извлечении последнего слова, wordIndices [wordNum + 1] имеет нежелательное значение.