2014-10-19 1 views
-1

str is string, ptr - массив указателей на символы. Мне нужно инициализировать str со значениями, содержащимися в ptr.Как инициализировать строку из массива значений указателя char (char * ptr [])

void help(char* ptr[]) { 
    cout << ptr[0]; 
    cout << ptr[1]; 
    cout << ptr[2]; 
    cout << ptr[3]; 
    string str = ptr[0]; 
    cout << endl << str << endl; 

} 
int main(int argc, char* argv[]) { 
    char arr1[] = "Hello"; 
    char arr2[] = "Hi" ; 
    char arr3[] = "Blah"; 
    char arr4[] = "Blah"; 
    char* ptr[4]; 
    ptr[0] = arr1; 
    ptr[1] = arr2; 
    ptr[2] = arr3; 
    ptr[3] = arr4; 
    help(ptr); 
} 
+2

Что вы хотите, чтобы строка инициализируется? Массив 'char *' - это набор строк не один, как вы, кажется, уже знаете. – Mat

+1

Что вы ожидаете от вывода? – juanchopanza

+0

Вы хотите объединить их? – BLUEPIXY

ответ

0

Если я правильно понял, что вам нужно, это следующая

#include <iostream> 
#include <string> 
#include <numeric> 
#include <cstring> 

std::string help(const char * ptr[], size_t n) 
{ 
    size_t len = std::accumulate(ptr, ptr + n, (size_t)0, 
            [](size_t acc, const char *p) 
            { 
            return acc + std::strlen(p); 
            }); 

    std::string str; 
    str.reserve(len); 

    str = std::accumulate(ptr, ptr + n, str, 
          [](std::string &s, const char *p) -> std::string & 
          { 
          return s += p; 
          }); 

    return str; 
} 

int main() 
{ 
    const char * ptr[] = 
    { 
     "Hello ", 
     "Hi ", 
     "Blah ", 
     "Blah " 
    };   

    std::cout << help(ptr, sizeof(ptr)/sizeof(*ptr)) << std::endl; 

    return 0; 
} 

Выход

Hello Hi Blah Blah 
+0

Мне интересно, почему вместо этого не начинать/заканчивать идиому (а также C++ - ish)? – Nawaz

+0

@Nawaz Где вы собираетесь использовать начало/конец? –

+0

'help (ptr, ptr + sizeof (ptr)/sizeof (* ptr));' – Nawaz

-2

Это должно сработать.

char ptr[] = "Hello"; 
string str(ptr);