Question: getting an error in following code Error: terminate called after throwing an instance of 'std::invalid_argument' what(): stoi can you fix it. #include #include #include using
getting an error in following code
Error: terminate called after throwing an instance of 'std::invalid_argument' what(): stoi
can you fix it.
#include
const int MAX_SIZE = 20;
// Card struct to store card information struct Card { char suit; string rank; };
// SortedList class using dynamic allocated arrays class SortedList { private: Card* cards; int size; int capacity; public: SortedList() { capacity = MAX_SIZE; cards = new Card[capacity]; size = 0; }
~SortedList() { delete[] cards; }
// Add new card to list in sorted order void putItem(Card card) { // If list is full, resize if (size == capacity) { capacity *= 2; Card* newCards = new Card[capacity]; for (int i = 0; i < size; i++) { newCards[i] = cards[i]; } delete[] cards; cards = newCards; }
int i = size - 1; while (i >= 0 && compareTo(card, cards[i]) < 0) { cards[i + 1] = cards[i]; i--; } cards[i + 1] = card; size++; }
// Remove card from list void deleteItem(Card card) { int i = 0; while (i < size && compareTo(card, cards[i]) != 0) { i++; } if (i < size) { for (int j = i; j < size - 1; j++) { cards[j] = cards[j + 1]; } size--; } }
// Get card from list Card getItem(Card card) { int i = 0; while (i < size && compareTo(card, cards[i]) != 0) { i++; } if (i < size) { return cards[i]; } else { return {' ', ""}; } }
// Print all cards in list void printAll() { for (int i = 0; i < size; i++) { cout << cards[i].suit << cards[i].rank; if (i < size - 1) { cout << ","; } } cout << endl; }
// Compare two cards based on their suit and rank int compareTo(Card c1, Card c2) { if (c1.suit < c2.suit) { return -1; } else if (c1.suit > c2.suit) { return 1; } else { if (c1.rank == "2") { return -1; } else if (c2.rank == "2") { return 1; } else if (c1.rank == "A") { return 1; } else if (c2.rank == "A") { return -1; } else if (c1.rank == "K") { return 1; } else if (c2.rank == "K") { return -1; } else if (c1.rank == "Q") { return 1; } else if (c2.rank == "Q") { return -1; } else if (c1.rank == "J") { return 1; } else if (c2.rank == "J") { return -1; } else { return stoi(c1.rank) - stoi(c2.rank); } } } };
int main() { string fileName; cout << "Enter a file name: "; cin >> fileName; // Create new SortedList instance SortedList* myList = new SortedList();
// Read cards from file and add them to list ifstream inputFile; inputFile.open(fileName); if (!inputFile) { cout << "Error: Could not open file." << endl; return 1; } char suit; string rank; while (inputFile >> suit >> rank) { Card card = {suit, rank}; myList->putItem(card); } inputFile.close();
// Print all cards in list myList->printAll();
// Delete card from list cout << "Enter a card to delete: "; cin >> suit >> rank; Card cardToDelete = {suit, rank}; myList->deleteItem(cardToDelete);
// Print all cards in list after deletion myList->printAll();
delete myList;
return 0; }
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
