(С++)написал функцию для поиска слова в строке, функция возвращает слово (result). входные данные: hello world
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
string getword(string source, unsigned short int number) {
string result;
unsigned short int counter = 0;
unsigned short int start = 0;
unsigned short int stop = 0;
for (unsigned short int i = 0; i < source.size(); i++) {
if (source[i] == ' ') {
stop = i;
counter++;
if (counter == number) {
unsigned short int a = 0;
unsigned short int b = start;
while (b < stop) {
result[a] = source[b];
a++;
b++;
}
}
else {
start = stop + 1;
}
}
}
return result;
}
int main() {
string temp;
getline(cin, temp);
cout<<getword(temp, 1);
system("pause");
return 0;
}
Ответы (1 шт):
Автор решения: AR Hovsepyan
→ Ссылка
У std::string есть соответствующие функции_члены для поиска, используйте их:
string getword(const string& source, unsigned short number)
{
size_t start = source.find_first_not_of(' '),
pos = start;
//пропустили ведущие пробелы, ищем нужную позицию
while ( start != source.npos && number--) {
start = source.find_first_not_of(' ', pos);
if (start == source.npos) return "";
pos = source.find(' ', start);
}
return source.substr(start, pos - start);
}
В функцию строку нужно передавать по константной ссылке, чтобы не копировать и для возможности передать временный объект или литерал. Второй аргумент можно передать по значению(копию), чтобы в функции не объявлять еще один объект. Ваша функция не выдает результат, поскольку условие не выполняется, и ваша строка остается пустая. Это следствие того, что вы объявляете слишком много переменных и сами же путаетесь в них, к тому же в таких случаях нужно использовать отладчик. Он вам подробно расскажет о всех результатах в каждой итерации цикла...