2015-11-11 2 views
2

Как говорится в теме. Я пытаюсь объединить несколько символов (из массива) в одну строку. я попыталсяКак объединить несколько символов bacis в одну строку в C++

char test[]={'A'}; 
char testt[]={'a'}; 
string testtt= test[0]+testt[0]; 

Но это не работает.

+3

'string testtt = string (test [0]) + testt [0];' – Slava

+2

По крайней мере, один из операндов для оператора '+' (http: // en.cppreference.com/w/cpp/string/basic_string/operator%2B) должна быть строка. –

+1

error.cpp: 10: 31: error: invalid conversion from 'char' to 'const char *' [-fpermissive] string testtt = string (test [0]) + testt [0]; – Sigstop

ответ

1
char test[]={'A'}; 
char testt[]={'a'}; 
string testtt=""; 
testtt+=test[0]; 
testtt+=testt[0]; 
+0

string testtt = ""; не нужно использовать string testtt; – Sigstop

0

Вы можете использовать конструктор, который принимает char *, length.

#include<iostream> 
#include<string> 

int main(){ 


char test[]={'A'}; 
char testt[]={'a','w'}; 
std::string testtt= std::string(&test[0], 1) + std::string(&testt[1],1);/ 
std::cout<<testtt<<std::endl; 
return 0; 
} 

или конструктор, который принимает диапазон:

std::string testtt= std::string(&test[0], &test[1]) + std::string(&testt[0],&testt[1]); 
0

Это будет делать трюк;)

#include <sstream> 

string toStr(char* tab, int length) 
{ 
    stringstream ss; 
    for (int i=0 ; i<length; i++) 
     ss << tab[i]; 
    return ss.str(); 
} 
0

если вы посмотрите внутри класса строки вы увидите, что это не перегрузить конструктор копирования, чтобы принять один параметр символа. вы можете думать, что вы реализуете свой собственный класс, содержащий строку объекта:

#include "stdafx.h" 
#include <iostream> 
#include <string> 
using namespace std; 


class MyStr 
{ 
    public: 
     MyStr(char c){ itsString = c;} 
     string GetStr()const {return itsString;} 

    private: 
     string itsString; 
}; 



int main(int argc, char* argv[]) 
{ 

char test[]={'A'}; 
char testt[]={'a'}; 
MyStr testtt = test[0] + testt[0]; 

cout << testtt.GetStr() << endl; 


cout << endl << endl << endl; 
return 0; 
} 

пробегов эту программу и компилятор никогда не жалуется, но результат не будет, как вы думаете: это не будет «Аа» но просто: 'ت', потому что на самом деле приведенный выше оператор: string testtt = test [0] + testt [0]; эквивалентно записи: cout < < (char) ('A' + 'a'); , что означает суммирование двух символов, и результатом является целочисленное значение ASCII, после чего это значение будет снова возвращено в charater, потому что вы действительно вызываете строку (char); что приведет к (charator of 162)

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