C/C++

Создание функции std::size_t String::find(char ch)

Создание функции std::size_t String::find(char ch), которая будет находить символ ch и возвращать индекс местоположения;
Если функция не находит символ, то возвращает - 1;

НЕ ИСПОЛЬЗУЯ сторонние функции
#include <iostream>
#include <string>
using namespace std;
struct String {
string s;
String(const char* s) : s(s) {}
String(const string& s) : s(s) {}
String(string&& s) : s(move(s)) {}
size_t find(const char ch)const {
const auto n = s.length();
for (auto i = 0U; i < n; ++i) if (s.at(i) == ch) return i;
return npos;
}
friend istream& operator>>(istream& inp, String& s) {
return inp >> s.s;
}
friend ostream& operator<<(ostream& out, const String& s) {
return out << s.s;
}
static const size_t npos = -1;
};
int main(void) {
String hello = "Hello world!";
cout << hello << '\n';
const char w = 'w';
auto index = hello.find(w);
cout << "Letter \'" << w << "\' - index: ";
if (index != String::npos) cout << index << '\n';
else puts("not found");
const char b = 'b';
index = hello.find(b);
cout << "Letter \'" << b << "\' - index: ";
if (index != String::npos) cout << index << '\n';
else puts("not found");
system("pause > nul");
}
АД
Александр Дюков
81 958
Лучший ответ
тупой перебор в цикле по длине строки, если равны, возврат текущего индекса. за циклом возврат - 1. только вот size_t - беззнаковый.
Сергей Чеканов
Сергей Чеканов
25 516
И в чем проблема? Перебираем строку. Если нашли - просто возвращаем индекс.
Если вышли из цикла (так и не нашли) - то возвращаем -1
Саша Михеев
Саша Михеев
17 671
Такая уже есть, только если она не находит символ, то она возвращает std:: string::npos
Сгасу Бф
Сгасу Бф
7 902
Евгений Зотин ему физкультура нужна судя по всему на С...