2012-06-18 1 views
0

Я делаю работу программирования, это как этотКак получить последний Charactor вы положили в ostream объект из

vector<Member> members; 
stringstream ss; 
stringstream ss1; 
for (vector<Member>::iterator it = members.begin; it != members.end(); it++){ 
    ss << it->name << ","; 
    if (check(it->id)){ 
     ss1 << it->name << ","; 
    } 
} 

так, наконец, будет «» что я не» t нужно, я хочу получить это из ss, как это сделать, я знаю, что могу использовать некоторые переменные, чтобы контролировать это, но я думаю, что непосредственное манипулирование ss будет более удобным. метод, предоставляемый некоторым другом, здесь не может обрабатывать ситуацию ss1, как я могу управлять «,» ss1.
и Может кто-нибудь сказать мне, почему ostream не может дать любые данные, но IStream могут Putback данные

+0

Просто используйте условное обозначение. Я сомневаюсь, что вы можете вытащить его из потока (и даже если можете, это просто кругом: вы что-то вложили, затем вы его вынимаете). – nhahtdh

+0

Рассмотрите возможность печати «,» перед тем, как напечатать имя для всех, кроме первого, которое будет, когда 'it == members.begin()' –

+0

спасибо, это хороший способ, я думаю, что могу его использовать, но я все еще хочу знать, можно ли манипулировать ss, чтобы получить последний символ, я проверяю документ библиотеки io, но не нашел его – user1462782

ответ

1

ostream, по имени, является выходной поток: он не предназначен, чтобы дать Вам какие-либо данные.

Даже если это так, однако, ваш код будет гораздо чище, используя простое условие:

vector<Member> members; 
stringstream ss; 
for (vector<Member>::iterator it = members.begin(); it != members.end(); it++) { 
    if (it != members.begin()) ss << ", "; 
    ss << it->name; 
} 
+0

Большое вам спасибо, я принимаю ваш метод. вы сказали, что выходной поток не предназначен для возврата каких-либо данных, я думаю, это правильно, я не нашел никакого способа в iostream любым способом – user1462782

+0

@ user1462782: Идея strem - это * канал *, который переносит значение после make это в текстовой форме в другое место. Это концептуально похоже на отправку почты: после того, как вы разместите ее в поле, она исчезла и теперь больше принадлежит вам. Если ваш поток, который должен быть направлен на строку, был направлен на соединение с выходным портом, как вы можете вернуть данные, которые вы передали? –

+0

спасибо, но почему istream имеет метод putback, чтобы вернуть последний обработчик, извлеченный из потока – user1462782

0

Вместо проверки, если вы пишете последний элемент, который вы можете написать первый и разделитель перед каждым рядом элемент:

vector<Member> members; 
stringstream ss; 

vector<Member>::iterator it = members.begin; 
if(it != members.end()){ 
    ss << it->name; 
    for (it++; it != members.end(); it++){ 
     ss << ", " << it->name; 
    } 
} 

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

  • Нет связанных вопросов^_^