Я пытаюсь удалить специальные символы из строки, которая находится в векторе. У меня возникли проблемы с тем, как точно удалить специальные символы. У меня есть векторные слова; который содержит слова из обычного текста, и я хочу удалить специальные символы, такие как ?!.,;
и т. д., а также удалить пробелы.Удаление специального символа из вектора строк C++
ответ
Вы могли бы пройти через ваш вектор и использовать
for(int p = 0; p < words.size(); p++)
{
for(int i = 0; i < words[p].length(); i++)
{
if(words[p][i] == ' ' || ...)
{
words[p].erase(i, 1);
i--;
}
}
}
Вместо ...
положить остальные специальные символы, которые вы хотите удалить, поэтому она находит все из них.
Here больше информации об удалении. В основном, первым параметром является позиция первого символа, который вы хотите стереть, а второй параметр - количество стираемых символов.
@FredLarson добавил исправление, спасибо за головы! –
Общий алгоритм выглядит следующим образом:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> v;
// get data into v
for (auto& s : v){
for (auto i = s.begin(); i != s.end(); ++i){
if (*i == '?' || *i == '!'){
i = s.erase(i);
}
}
}
}
Это пропустит персонажей. –
Как он будет пропустить персонажей? – Bizkit
Поскольку, как только вы удаляете символ, ваш индекс отключается на единицу. –
Стирание одного символа снова и не очень быстро. Задача может быть сделано путем создания новой строки и добавив к нему без специальных символов:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<string> words;
words.push_back("");
words.push_back("452346457");
words.push_back(",.,;,;.;,;.;.?");
words.push_back(";m;,./,/;,m;m,/,./,;");
string special = string("?:,.;");
for (string::size_type i = 0; i < words.size(); ++i)
{
string temp = words[i];
words[i] = "";
for (string::size_type j = 0; j < temp.size(); ++j)
{
if (special.find(temp[j]) == string::npos)
{
words[i] += temp[j];
}
}
}
for (string::size_type i = 0; i < words.size(); ++i)
{
cout << "\"" << words[i] << "\"\n";
}
}
Обратите внимание на использование очень полезной find функции.
Если количество специальных символов - большое число, лучше использовать 'std :: set
- 1. удаление строк из вектора
- 2. Удаление строк из вектора
- 3. Удаление специального символа в строке в C++
- 4. Удаление специального символа из текстового файла
- 5. удаление символа из массива строк
- 6. Удаление специального символа из текстового файла возвращает пустой файл
- 7. Удаления специального символа из консоли - C#
- 8. Удаление специального символа из консоли для загрузки txt-файла
- 9. Удаление веб-формы после специального символа
- 10. Удаление и добавление строк из вектора
- 11. C++ удаление из вектора объектов
- 12. C++ удаление из вектора писем
- 13. C++ удаление из вектора указателей
- 14. C# xml кодировка специального символа
- 15. Предотвращение ввода специального символа C#
- 16. Декодирование специального символа в C#
- 17. удаление строк из вектора через boost :: bind
- 18. Удаление специального символа при импорте данных из excel
- 19. Исправлен шрифт Firefox/текст специального символа вместо символа специального символа
- 20. Удаление символа из строки C++
- 21. Ошибка специального символа символа XML
- 22. Преобразование строки из специального символа
- 23. Удаление 1-го символа из строк
- 24. отображение специального символа правильно
- 25. Простой способ изменить цвет «специального» специального символа
- 26. Удаление элементов из вектора
- 27. SQL-подстрока от специального символа до специального символа
- 28. Длина специального символа
- 29. GSUB: Удаление специального символа в конце строки в R
- 30. Преобразование заголовка специального символа?
в то время как (входной_файл >> слово) \t \t { \t \t \t words.push_back (слово); \t \t} С этим я заполнил вектор и что получаю в результате: Право? wiliam "" и т. Д. Я хочу удалить специальные символы –
Редактировать свой вопрос кодом, не помещать в комментарии. –