Если у меня есть указатель на строку в середине которой содержится число. Я могу перевести в число примерно так:
wchar_t* begin = L"A12A";
begin++;
wchar_t* end;
unsigned long n = ::wcstoul(begin, &end, 10);
А как мне сделать подобное если число содержится в std::wstring
и есть итератор на начало числа:
std::wstring wstr(L"A12B")
std::wstring::iterator it = wstr.begin();
it++;
//Получаем число
И на выходе итератор должен указывать на B;
Если у тебя есть только итератор под рукой и нет родительского (к итератору) объекта (строка), тогда можно вот так сделать
wchar_t* itAddress = &(*it);
unsigned long n = ::wcstoul(itAddress, L'\0', 10);
Т.е. через итератор получаем указатель на данные, которые хранятся в строке (итератор для строки по себе сам указатель по сути, его просто надо правильно преобразовать)
Если у тебя есть родительская строка, то можно сделать так:
unsigned long n = ::wcstoul(wstr.c_str() + 1, L'\0', 10);
Т.е. сразу легально (средствами строки) получаем указатель на данные, которые хранятся в строке
P.S.
Чуть скорректировал код чтобы определять где функция wcstoul закончила работу
wchar_t* itAddress = &(*it);
wchar_t* itAddressEnd = 0;
unsigned long n = ::wcstoul(itAddress + 1, &itAddressEnd, 10);
std::wstring::iterator itNew = it + ((long long)itAddressEnd - (long long)itAddress - 2);
-2
потому что 1) начали с символа it+1 - это дало -1
, 2) закончили на предыдущем символе - это дало еще -1
В голову приходит только решение вроде такого
#include <iostream>
#include <string>
using namespace std;
int main()
{
wstring wstr(L"A1298BAAC");
wstring::iterator it = wstr.begin();
it++;
wchar_t* result_it;
auto x = wcstoul(&*it, &result_it, 10);
wstring::iterator it2 = wstr.begin();
while(it2 != wstr.end() && &*it2++ != result_it){
}
int pos = std::distance(wstr.begin(), it2) - 1;
std::wcout << x << endl << result_it << endl << pos << endl << wstr.substr(pos);
}
И вывод
1298
BAAC
5
BAAC
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня проблема с UWP и Visual Studio 2015 ProЯ создаю UWP приложение на Visual C++, и в нем просто отправляю http запрос на сервер
Есть ответ, в котором перечень валют с значениямиНа случай если список валют увеличится, я в заранее хотел распарсить и сохранить массив...