2013-11-18 2 views
0

в программе ниже, мне нужно вставить строку до '|' символ в комплекте.Как пропустить все символы из строки после появления определенного символа

но после стирания charcter '|' в моем коде, я не могу пропустить весь персонаж до конца.

вход: +919845, 0987654321, 987654320 | 9845, +91987654321, 0987654320, 987654323, 987654320

ожидается выход: +919845, 0987654321, 987654320

Примечание: (1) после ввода данных, тип выхода. (2) Функция подстроки не может использоваться для этой цели.

#include<iostream> 
#include <unordered_set> 
#include<string> 
using namespace std; 
int main() 
{ 
string str; 
string::iterator it; 
unordered_set <string> s; 


while(getline(cin,str)) // 
    { 
     if(str=="exit") 
     { 
       break; 
     } 

     for (it= str.begin(); it !=str.end(); it++) 
     { 
      if (*it =='|') 
      { 
       it = str.erase(it); 

      } 


     } 
    s.insert(str); 


    } 


for (unordered_set<string> ::const_iterator itr = s.begin(); itr != s.end(); ++itr) { 
    cout<<*itr<<endl; 
} 

return 1; 
} 

ответ

0

Я думаю, что нет ничего слишком сложно ..

#include <iostream> 

using namespace std; 

int main() 
{ 
    string myString = "+919845, 0987654321, 987654320|9845, +91987654321, 0987654320, 987654323, 987654320"; 

    for (unsigned int i = 0; (myString[i] != '|') && (i < myString.length()); i++) 
     cout << myString[i]; 
    cout << endl; 

    return 0; 
} 
+1

Спасибо за ваш повтор, но я не могу использовать одну и ту же строку для вставки в набор. – user2997518

1

Попробуйте использовать строку :: find_first_of смотрите здесь: * http://www.cplusplus.com/reference/string/string/find_first_of/ *

Используйте выше функции, чтобы найти индекс следующий разделитель "|" и создать строку из диапазона (подстрока). Этот метод также очень быстрый по сравнению с альтернативами. Другой вариант - использовать strtok C на копии строки.

0

Вместо кода

for (it= str.begin(); it !=str.end(); it++) 
    { 
     if (*it =='|') 
     { 
      it = str.erase(it); 

     } 


    } 

пытаются использовать

str.erase(str.find('|')); 

яркий пример

std::string s = "+919845, 0987654321, 987654320|9845, +91987654321, 0987654320, 987654323, 987654320"; 
    std::cout << s << std::endl; 

    s.erase(s.find('|')); 
    std::cout << s << std::endl; 

Выход

+919845, 0987654321, 987654320|9845, +91987654321, 0987654320, 98765 
4323, 987654320 
+919845, 0987654321, 987654320 
+0

Это не работает, и моя программа сбой – user2997518

+0

Это действительно работает. Например, для вашей входной строки вы получите, что str будет равна +919845, 0987654321, 987654320 –

+0

Спасибо, что работает отлично, раньше я думал, что мне нужно заменить код внутри цикла, так что это была моя ошибка. – user2997518

Смежные вопросы