У меня есть вектор строк: vectorElements Я хотел бы создать вектор * char, чтобы указать на начало каждой строки. Моя цель состоит в том, чтобы иметь возможность проходить через каждую строку, символ по характеру. В конечном счете, я хотел бы отсортировать вектор строк. Примечание: Строки могут содержать целые значения. В этом случае, я буду сортировать, основываясь на их числовом значении.создание векторов указателей символов для указания на вектор строк
ответ
Если вы пишете в C++, то лучше использовать C++ string
вместо массива в стиле C из char
. Вы все равно можете перебирать каждый символ с помощью получения итератора с begin()
и использовать перегруженный оператор ++
на итераторе для перехода к следующему символу (проверьте с помощью итератора, возвращаемого end()
, чтобы узнать, достигли ли вы конца строки или нет). Вы также можете ссылаться на символ в строке в стиле C с помощью перегруженного оператора []
.
Следовательно, vector<string>
может быть тем, что вам нужно.
Для сортировки строк вы можете использовать функцию sort
в заголовке algorithm
. Поскольку вы не сортируете их лексически все время, вы должны определить свою собственную функцию, которая сравнивается между двумя строками.
ПСЕВДОКОД для сравнения:
while (i < str1.length() && i < str2.length())
if (!isDigit(str1[i]) || !isDigit(str2[i]))
// Lexical comparison
if (str1[i] != str2[i])
i++
else
return str1[i] < str2[i]
else // If both are digits
// parseInt will parse the number starting from current position
// as positive integer
// - It will consume as many characters as possible (greedily) and
// return the parsed number plus the number of characters consumed
// - If the number is very large (exceed 64-bit), you may want to
// only find the length of the number and write another
// comparison function for big numbers.
// The code below assumes no overflow
(num1, len1) = parseInt(str1, i)
(num2, len2) = parseInt(str2, i)
if (num1 == num2)
i += len1
else
return num1 < num2
if (str1.length() == str2.length())
return false
else
return str1.length() < str2.length()
Вы можете использовать std::sort.
for (int i=0; i<vec.size(); ++i)
{
std::string & str = vec[i];
std::sort(str.begin(), str.end());
}
Вам нужно будет добавить произвольный компаратор для удовлетворения желания OPs обрабатывать строки, которые «содержат числовое значение», по сравнению с лексиграфическим типом по умолчанию. – dmckee
- 1. инициализация указателей на вектор векторов
- 2. динамический вектор векторов указателей на объекты, C++
- 3. массив указателей на вектор указателей
- 4. Вектор векторов (символов): ядро сбрасывали
- 5. как инициализировать опорный вектор объект векторов указателей
- 6. Создание вектора указателей, указывающих на большее количество векторов
- 7. векторов указателей на объекты
- 8. Объединить вектор строк/символов
- 9. вектор, указывающий на вектор указателей
- 10. Вектор векторов на C
- 11. Печать вектор векторов для ostream
- 12. Класс векторов C++ для хранения указателей на объекты
- 13. reinterpret_cast вектор указателей на вектор указателей на базовый класс
- 14. Понимание массива символов указателей строк
- 15. Вектор указателей на структуру
- 16. Заполнить вектор векторов строк из входного файла
- 17. векторов указателей, наследование
- 18. Указатель на вектор указателей
- 19. Сплит-вектор в вектор векторов
- 20. C++ Вектор указателей
- 21. Вектор векторов
- 22. Как const_cast вектор константных указателей на вектор неконстантных указателей?
- 23. шаблон, содержащий вектор или вектор векторов
- 24. Ловля out_of_range на вектор векторов
- 25. C++ массив векторов инициализации указателей
- 26. Передача векторов полученных общих указателей?
- 27. как создать вектор указателей на вектор
- 28. Инициализировать вектор векторов в C++
- 29. push_back вектор векторов в вектор
- 30. Маршалинг векторов указателей
Вы можете написать в C++? Или вы должны писать в C-коде? – nhahtdh
Я делаю это в C++. – NicholasNickleby
Немного непонятно, каков ваш вопрос на самом деле. Не могли бы вы привести пример кода, который у вас есть, возможно, с прокомментированными заглушками для тех частей, которые вы не знаете, как их создать? –