2015-03-22 3 views
-2

Я создаю функцию извлечения последних имен из массива и печати имени на экран. Мне удалось извлечь первую фамилию в массиве, но затем вывод объединяет первое имя первого индекса со следующей фамилией позиций индекса. Ниже мой код, спасибо за помощь!substr конкатенировать элементы массива C++

{ 

    stringstream ss; 
    string name; 


    for(int i=0; i < elements; i++) 
    { 
     ss << first[i]; 
     ss >> name; 
     int pos = name.find(","); 
     cout << pos; 
     string last = name.substr(0,pos); 
     cout << "\"" << last << "\"" << endl; 


    } 

    cout << endl; 

} 
+0

Вы, вероятно, хотите, чтобы проверить, если 'найти()' вернулся что-то отличное от 'станд :: струнной :: npos' и использовать' последняя строка = name.substr (0, поз - 1); '. –

+0

Спасибо за ответ, но он, похоже, не помогает. Вычитание 1 из позиции не поможет, так как оно просто удалит один символ из вывода. Я пытаюсь понять, почему имена из массива конкатенируются со строками, которые находятся на отдельных индексах массива. –

ответ

0

Попробуйте следующий код:

int main() 
{ 
    string name = "asd,kkaa"; 
    int pos = name.find(","); 
    if(string::npos != pos) 
    { 
     string part1 = name.substr(0,pos); 
     string part2 = name.substr(pos+1); 
     cout << "\"" << part1 << "\"" << endl; 
     cout << "\"" << part2 << "\"" << endl; 
    } 
    return 0; 
} 
// output: 
// "asd" 
// "kkaa" 

Я думаю, что это нормально, так что может дать нам больше вашего входного значения?

+0

спасибо, что я дал это испытание, входные значения в формате: Монтана, Тони –

+0

Нет Его все еще конкатенация различных индексов массива, например: Тони, Монтана - Дин, Джеймс - становится «Дин» --- «Монтана», --- «TonyDean» –

+0

вы могли бы рассказать нам информацию о вашем массиве [я имею в виду точную структуру] и какой вид вы хотите передать функции, и что вы хотите в конце? – edwardramsey

-1

Это потому, что вы используете струнные потоки.

Каждый раз, когда вы читаете новое имя из массива, вы добавляете его в выходной буфер. Затем вы читаете следующее слово из буфера, поэтому вы никогда не пропустите первое имя. Похоже, что вы делаете это, вы можете просто удалить поток строк вместе и просто придерживаться стандартного ввода и вывода (cin/cout). В противном случае очищайте буфер каждый раз, когда вы читаете в новой строке (ss.clear());

for(int i = 0; i < elements.size(); i++){ 
     int pos = elements[i].find(","); 
     cout << "\"" << elements[i].substr(0,pos) << "\"" << endl; 
    } 
+0

Большое спасибо! –

+0

_'cout << "\" << elements [i] .substr (0, pos) << "\ n"; '_ Э-э, что, пожалуйста? –

+0

В чем проблема? –

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