sum([ 1 for _ in range(len(string)-len(str_to_search_for)+1) if string[_:_+len(str_to_search_for)] == str_to_search_for])
В понимании списка мы перемещаем большую строку по одной позиции за раз с скользящим окном длины меньшей строки. Мы можем вычислить скользящее число, вычитая длину меньшей строки из большей строки. Для каждого слайда мы сравниваем ту часть большей строки с нашей меньшей строкой и генерируем 1 в списке, если совпадение найдено. Сумма всех этих 1 в списке даст нам общее количество найденных совпадений.
Вот быстрый и грязный пример того, что вы можете сделать, код имеет внешний цикл, который перебирает цвета и создает 10 экземпляров игрока на цвет.
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
class Player {
public:
Player(int id, string color, string name) :
_id(id), _color(color), _name(name) {
}
int getId() { return _id; }
string getColor() { return _color; }
string getName() { return _name; }
string toString() {
ostringstream ss;
ss << _id << "," << _color << "," << _name;
return ss.str();
}
private:
int _id;
string _color;
string _name;
};
int main() {
vector<Player> players;
int playerId = 0;
for (auto color : {"black", "blue", "green", "cyan", "red"}) {
for (int i = 0; i < 10; ++i) {
playerId++;
players.emplace_back(Player(playerId, color, "Player" + to_string(playerId)));
}
}
for (auto p : players) {
cout << p.toString() << endl;
}
return 0;
}
Цвета могут быть сохранены в векторе динамически и затем доступны с помощью векторного итератора, который является более быстрым методом. Цикл для перебора векторов и еще один для создания 10 игроков на цвет будет достаточным для вашего требования. Пример вашего подхода доступен ниже, имя игрока может быть изменено в соответствии с вашими требованиями:
#include <iostream>
#include <string>
#include <vector>
class Player
{
public:
Player(int id, std::string color, std::string name);
void Display();
int _id;
std::string _color;
std::string _name;
};
Player::Player(int id, std::string color, std::string name)
{
_id = id;
_color = color;
_name = name;
}
void Player::Display()
{
std::cout << _id << ' ' << _color << ' ' << _name << '\n';
}
int main(int argc, const char * argv[])
{
std::vector<Player*> players;
std::vector <std::string> colour;
colour.push_back("Black");
colour.push_back("Red");
colour.push_back("Orange");
colour.push_back("Yellow");
colour.push_back("Blue");
int id = 1;
for(std::vector<std::string>::iterator it = colour.begin(); it != colour.end(); it++)
{
for(int i=0; i<10; i++)
{
std::string player = "player";
std:: string name = player + std::to_string(id);
Player* player1 = new Player(id, (*it), name);
players.push_back(player1);
player1->Display();
id++;
}
}
return 0;
}