2015-11-28 4 views
1

Я новичок в C++. У меня вопрос, как я могу получить строку из строкового элемента (один элемент или символ). У меня есть std::string с именем h и содержит "HKK". Теперь у меня есть другая строка с именем k. Теперь я хочу, чтобы получить номер элемента 1 (к) от h и установить его на kПолучить строку из строкового элемента

#include<iostream> 
#include<string> 

using namespace std; 

int main() { 
    string h = "HKK"; 
    string k = h.at(1); //K 
    cout << k << endl; 
    return 0; 
} 

Но компилятор (г ++) дает ошибку, что:

error: invalid conversion from ‘char’ to ‘const char*’ [-fpermissive] 
string k = h.at(1); 
       ^

редактировать: Если я сделайте это для такой функции, как:

void out(string out) { 
    cout << "Out : " << out << endl; 
} 

int main() { 
    string h = "HKK"; 
    out(h.at(1)); //K 
    return 0; 
} 

Есть ли какие-либо решения?

string k += h.at(1); 
out(k); 

Пожалуйста, помогите! Спасибо Извините за плохой английский

+1

['std :: substr()'] (http://en.cppreference.com/w/cpp/string/basic_string/substr), а не 'at()'. –

ответ

1

как я могу получить строку из строки элемента (один элемент или символ). Например, у меня есть std::string имени h и содержит "HKK"

либо вы используете std::string::at:

std::string h = "HKK"; 
std::string k; 
k += h.at(1); //K 

или вы используете std::string::operator[]:

k += h[1]; 

Теперь у меня есть еще один string по названию k. Теперь я хочу получить элемент номер 1 (k) от h и установить его в 'k'.

либо вы используете std::string::replace:

std::string k = "HkK"; 
k.replace(1, 1, "k"); 

или вы используете std::string::operator[]:

k[1] = 'k'; 
+0

См. Edit – Mominul

1

Хотя лично мне не нравится ваш function призвание еще я обеспечиваю решение к ней, которые следующим образом: -

void out(string out) 
{ 
    cout << "Out : " << out << endl; 
} 

int main() 
{ 
    string h = "HKK"; 
    out(string().append(1,h.at(1))); //K 
    return 0; 
} 

Здесь вы создаете временную переменную string с string() & append 1 символ к ней (то есть h.at(1) в вашем случае). Следовательно, out, который является строкой в ​​вашей функции out имеет только одно значение, то есть K.

Однако я всегда буду рекомендовать вам использовать non-temporary, а не временный, как в этом случае. Они намного безопаснее & менее подвержены ошибкам.

+0

Ни один из них не будет скомпилирован, если будет использоваться для замены строки с надписью '// K'. Было бы неплохо расширить ваш ответ, чтобы показать полную замену этой линии. –

+1

вы также можете использовать 'string (" "). Append ({h.at (1)})' – CppNITR

+0

@CppNITR ok да !! Это функция C++ 11, которую я помню !!! Благодаря !!! –

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