Mit push_back auf einen Vektor von Zeichenketten - C++
Ich versuche, mit push_back
auf einen Vektor von Zeichenketten in C++. , Wie kann ich push ein einzelnes Zeichen auf dem Vektor? Derzeit, ich habe Folgendes versucht, alles ohne Erfolg:
- Initialisiert, eine Zeichenfolge (versucht) mit dem Charakter.
Code
string str(main_string[0]);
vector_string.push_back(str);
- Versucht zum aufrufen von strcpy und so kopieren Sie den Inhalt. Const-ness scheint in die Quere kommen.
Code
string str;
strcpy(main_string[0], str.c_str());
vector_string.push_back(str);
Weitere Vorschläge/Ideen sind willkommen.
Edit: Die error-logs sind wie folgt:
test_push.C: In function ‘void test_push(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::string)’:
test_push.C:50: error: no matching function for call to ‘std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char&)’
/usr/lib/gcc/i586-redhat-linux/4.4.1/../../../../include/c++/4.4.1/bits/basic_string.tcc:220: note: candidates are: std::basic_string<_CharT, _Traits, _Alloc>::basic_string(typename _Alloc::rebind<_CharT>::other::size_type, _CharT, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
/usr/lib/gcc/i586-redhat-linux/4.4.1/../../../../include/c++/4.4.1/bits/basic_string.tcc:213: note: std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>] <near match>
/usr/lib/gcc/i586-redhat-linux/4.4.1/../../../../include/c++/4.4.1/bits/basic_string.tcc:206: note: std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, typename _Alloc::rebind<_CharT>::other::size_type, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
/usr/lib/gcc/i586-redhat-linux/4.4.1/../../../../include/c++/4.4.1/bits/basic_string.tcc:194: note: std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::basic_string<_CharT, _Traits, _Alloc>&, typename _Alloc::rebind<_CharT>::other::size_type, typename _Alloc::rebind<_CharT>::other::size_type, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
/usr/lib/gcc/i586-redhat-linux/4.4.1/../../../../include/c++/4.4.1/bits/basic_string.tcc:184: note: std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::basic_string<_CharT, _Traits, _Alloc>&, typename _Alloc::rebind<_CharT>::other::size_type, typename _Alloc::rebind<_CharT>::other::size_type) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
/usr/lib/gcc/i586-redhat-linux/4.4.1/../../../../include/c++/4.4.1/bits/basic_string.tcc:170: note: std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
/usr/lib/gcc/i586-redhat-linux/4.4.1/../../../../include/c++/4.4.1/bits/basic_string.tcc:178: note: std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
/usr/lib/gcc/i586-redhat-linux/4.4.1/../../../../include/c++/4.4.1/bits/basic_string.h:2147: note: std::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
test_push.C:61: error: conversion from ‘char’ to non-scalar type ‘std::string’ requested
test_push:90: error: no matching function for call to ‘std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char&)’
/usr/lib/gcc/i586-redhat-linux/4.4.1/../../../../include/c++/4.4.1/bits/basic_string.tcc:220: note: candidates are: std::basic_string<_CharT, _Traits, _Alloc>::basic_string(typename _Alloc::rebind<_CharT>::other::size_type, _CharT, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
/usr/lib/gcc/i586-redhat-linux/4.4.1/../../../../include/c++/4.4.1/bits/basic_string.tcc:213: note: std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>] <near match>
/usr/lib/gcc/i586-redhat-linux/4.4.1/../../../../include/c++/4.4.1/bits/basic_string.tcc:206: note: std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, typename _Alloc::rebind<_CharT>::other::size_type, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
Mehr info: In dieser Funktion entweder den ganzen string oder nur den ersten Buchstaben gedrückt ist, der Vektor-basierend auf seinen Inhalt. Also, ich bin auf der Suche nach Funktion, konvertiert einen char
in ein C++ - Stil std::string
(um es akzeptabel zu einem Vektor).
Dank,
Sriram
Was sind die Fehler, Sie sind eigentlich immer? Auch im zweiten Lauf, versuchen Sie zu kopieren str in main_string[0] oder Umgekehrt?
string ist wiederum ein Vektor von Zeichen. Warum wollen Sie einen vector mit Strings ( aber nur ein Zeichen)?
Eigentlich Ihr problem ist, initialisieren einen string mit einem Zeichen.
Hinzugefügt mehr info.
ja. das ist mein problem
string ist wiederum ein Vektor von Zeichen. Warum wollen Sie einen vector mit Strings ( aber nur ein Zeichen)?
Eigentlich Ihr problem ist, initialisieren einen string mit einem Zeichen.
Hinzugefügt mehr info.
ja. das ist mein problem
InformationsquelleAutor Sriram | 2011-03-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
keine Notwendigkeit für strcpy für ein einzelnes Zeichen.
string str; str += main_string[0];
.danke! Das war es.
oder
string str (main_string, 0, 1);
Es gibt eine Menge von Möglichkeiten, dies zu tun!InformationsquelleAutor Tim
Können Sie auch initialisiert werden mit einem Zeichen wie diesem.
InformationsquelleAutor ali_bahoo
Können Sie die Zeichen direkt über einen entsprechenden string-Konstruktor:
EDIT: Entfernt Alternative Lösung nach der Realisierung dupliziert es @Tim s.
InformationsquelleAutor Marcelo Cantos