Недавно писал программу и столкнулся с одной проблемой.
Проблема заключалась в строке:
string s = "7@";
Так вот в чем же сама проблема:
"7" - это номер ключа в моей программе, а "@" - это часть ключа (вид). В одной функции мне надо узнать именно этот вид ключа(без цифры).
Как это сделать? Разделить эту строку на "7" и "@" отдельно?
Не совсем понятно, зачем в данном случае вообще разделять строку. Строка здесь - некий "контейнер", зачем же нам тогда нарушать его целостность, если мы всего лишь хотим прочитать один из его элементов?
Так что вопрос здесь - "Как получить значение символа строки, зная его индекс?".
Способов получить значение символа в строке у нас много:
1. operator[]
Наверное, самый привычный для новичков способ из представленных - с его помощью можно получить доступ к элементам массива. Применение абсолютно идентичное:
std::string str = "7@";
std::cout << str[1];
2. std::string::at(size_t)
Очень похожий на предыдущий оператор метод, принимает все тот же индекс, но при этом проверяет, не вышел ли этот индекс за пределы массива. Применение:
std::string str = "7@";
std::cout << str.at(1);
3. std::string::back()
В вопросе сказано, что нужный элемент находится на 2м месте, а размер строки - 2, значит, нужный элемент является последним в строке. У std::string есть метод обращения к первому и последнему элементу - front и back, в данном случае нам, очевидно, нужен std::string::back:
std::string str = "7@";
std::cout << str.back();
Почему не стоит использовать std::string::substr(...), как указали в комментариях
Все просто, substr(...) возвращает std::string, пускай даже от одного элемента, это все равно строка, а не символ.
Представим ситуацию, у нас есть функция, которая принимает символ:
void foobar(char) {...}
Использование substr не будет работать - нам нужен char, а не string. Для данного вопроса можно, конечно, решить эту проблему:
std::string str = "7@";
foobar(str.substr(1, 1)[0]); // замечательно
foobar(str.substr(1, 1).at(0)); // еще лучше
Думаю, тут и без объяснений все ясно :)
Поэтому не стоит изобретать велосипед, если нам нужно получить символ - используем методы строки для получения символа, а не подстроки.
Получить из строки цифры и буквы:
string s("2algo34rithm5"), numbers, letters;
size_t pos = stable_partition(s.begin(), s.end(),
[](char c) { return isdigit(c); }) - s.begin();
numbers = s.substr(0, pos); //все цифры
letters = s.substr(pos); //все буквы
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Дело заключается в том что при вождении курсора в окне sfml при нажатии клавиши движения, персонаж движется быстрее и рывкамиСоответственно...
Как собрать C++ Windows API Desktop приложение с WebKit? Видел WebKitNET но интересует чисто C++
Есть файлы, зашифрованные с помощью библиотеки Crypto++, алгоритм CBC