Czy istnieje metoda wyszukiwania() niewrażliwego na wielkość znaków dla std :: string?Łańcuch niewrażliwy na wielkość liter :: znajdź
Odpowiedz
Można pisać dużymi literami i używać zwykłego znaleziska. (Uwaga: to podejście może nie być poprawne, jeśli masz ciąg znaków Unicode.)
W funkcji Boost jest również ifind_first
w przypadku wyszukiwania bez rozróżniania wielkości liter. (zwróć uwagę, że zwraca zakres zamiast size_t
).
#include <string>
#include <boost/algorithm/string/find.hpp>
#include <cstdio>
#include <cctype>
std::string upperCase(std::string input) {
for (std::string::iterator it = input.begin(); it != input.end(); ++ it)
*it = toupper(*it);
return input;
}
int main() {
std::string foo = "1 FoO 2 foo";
std::string target = "foo";
printf("string.find: %zu\n", foo.find(target));
printf("string.find w/ upperCase: %zu\n", upperCase(foo).find(upperCase(target)));
printf("ifind_first: %zu\n", boost::algorithm::ifind_first(foo, target).begin() - foo.begin());
return 0;
}
+1 Boost.String Algorithms jest warunkiem wstępnym dla projektów :) –
Po prostu dałem ifind_first napęd testowy i było wolniejsze niż konwersja 2 łańcuchów na mniejsze litery (za pomocą boost) i użycie std :: string :: find. – goji
Ale nie będzie działać dla Unicode w ogólnym przypadku. "ß" i "SS" powinny porównywać równe, ale algorytmy algorytmów wzmocnienia nie radzą sobie z tym. – dalle
for(int i=0; i<yourString.length()
&& tolower(yourString[i])!=yourLoweredChar; i++)
{
return i;
}
return -1;
Jeśli zwracane jest -1 wtedy twój cel char nie ma
inny daje pierwszy occurrance z char
zanim cokolwiek ozdobnego, rzucić okiem na
http://www.gotw.ca/gotw/029.htm
i sprawdź, czy użycie niestandardowej klasy cech postaci nie jest tym, czego potrzebujesz.
to, co bym sugerował, (tak samo jak @programmersbook)
#include <iostream>
#include <algorithm>
#include <string>
bool lower_test (char l, char r) {
return (std::tolower(l) == std::tolower(r));
}
int main()
{
std::string text("foo BaR");
std::string search("bar");
std::string::iterator fpos = std::search(text.begin(), text.end(), search.begin(), search.end(), lower_test);
if (fpos != text.end())
std::cout << "found at: " << std::distance(text.begin(), fpos) << std::endl;
return 0;
}
- 1. Przełącznik niewrażliwy na wielkość liter jako zmienna?
- 2. Globalnie niewrażliwy na wielkość liter zsh/bash
- 3. Filtr niewrażliwy na wielkość liter Spark'a SQL dla warunków kolumnowych
- 4. Analizator składni niewrażliwy na wielkość liter w C#
- 5. Czy NSFetchRequest propertiesToGroupBy może być niewrażliwy na wielkość liter?
- 6. Jak ustawić String.Contains jest niewrażliwy na wielkość liter?
- 7. Czy C++ 11 wprowadził algorytm porównywania wielkości liter niewrażliwy na wielkość liter?
- 8. Znajdź wyszukiwania niewrażliwe na wielkość liter w linii
- 9. Meteor: jak zrobić niewrażliwy na wielkość kolekcji collection.findOne()?
- 10. JavaScript: niewrażliwe na wielkość liter
- 11. Lista niewrażliwa na wielkość liter
- 12. Jak przeprowadzić sortowanie niewrażliwe na wielkość liter w JavaScript?
- 13. Może deserializować GSON w sposób niewrażliwy na wielkość znaków
- 14. Jak wykonać ciąg niewrażliwy na wielkość liter w zapytaniu NHibernate Linq?
- 15. Indeks niewrażliwy na wielkość liter MongoDB "zaczyna się od" problemów z wydajnością
- 16. Jak porównać ciągi ze względu na wielkość liter i akcent niewrażliwy
- 17. Czy można utworzyć glob(), aby znaleźć pliki w sposób niewrażliwy na wielkość liter?
- 18. Znajdź podciąg w sposób uwzględniania wielkości liter - C#
- 19. Nieczułe na wielkość liter zamień na
- 20. wielkość liter Directory.Exists/File.Exists
- 21. PHP wielkość liter explode()
- 22. Jak mogę zrobić rozróżnianie wielkości liter niewrażliwe na wielkość liter?
- 23. Wyszukiwanie niewrażliwe na wielkość liter w Mongo
- 24. Adresy niewrażliwe na wielkość liter dla Django?
- 25. Lista zapytań Django nieodczułowa na wielkość liter
- 26. Uruchamianie kwerendy niewrażliwe na wielkość liter
- 27. Wybrane opcje niewrażliwe na wielkość liter
- 28. Nieczułe na wielkość liter porównywanie ciągów znaków
- 29. wielkość liter na Mac dla file_exists()?
- 30. Jak ustawić operator% like% na wielkość liter?
Zależy znaczeniu "wielkość liter ma znaczenie." Czy masz tylko litery ASCII, czy potrzebujesz pełnego zestawienia Unicode? – Philipp