C++: Как создать Строки / символ*

Я плохо знаком с C++. Я хочу сделать a char*, но я не знаю как.
В Java это просто это:

int player = 0;
int cpu = 0;
String s = "You: " + player + " CPU: " + cpu;

Как я могу сделать это? Мне нужен a char*.

Я фокусируюсь на вставке целого числа после строки.

8
задан ApproachingDarknessFish 6 February 2014 в 18:04
поделиться

6 ответов

Вы почти наверняка не захотите иметь дело с char *, если можете - вам понадобится класс C ++ std :: string:

#include <string>
..
string name = "fred";

или связанный класс stringstream:

#include <sstream>
#include <string>
#include <iostream>
using namespace std;

int main() {

  int player = 0;
  int cpu = 0;

  ostringstream os;
  os << "You: " << player << " CPU: " << cpu;
  string s = os.str();
  cout << s << endl;
}

, если вам действительно нужен указатель на символ (и вы не сказали, почему вы так думаете), вы можете получить его из строки, используя ее функцию-член c_str ().

Все это должно быть описано в любом вводном учебнике по C ++. Если вы еще не купили его, получите Accelerated C ++ . Вы не можете изучить C ++ только по Интернет-ресурсам.

33
ответ дан 5 December 2019 в 04:42
поделиться

Если вы работаете с C ++, просто используйте std :: string . Если вы работаете с char * , вы, вероятно, захотите работать с C напрямую. В случае C вы можете использовать функцию sprintf :

char* s = // initialized properly
sprintf( s, "You: %d CPU: %d", player, cpu );
7
ответ дан 5 December 2019 в 04:42
поделиться

Просто позвоните по номеру s.c_str (); . Здесь вы можете увидеть больше.

PS. Вы можете использовать strcpy , чтобы скопировать содержимое в новую переменную, а затем вы сможете изменить его.

2
ответ дан 5 December 2019 в 04:42
поделиться

char * означает "указатель на символ".

Вы можете создать указатель на "строку" следующим образом:

char* myString = "My long string";

В качестве альтернативы вы можете использовать std::string:

std::string myStdString("Another long string");
const char* myStdString.c_str();

Обратите внимание на const в начале последнего примера. Это означает, что вы не можете изменить символы, на которые указывает указатель. Вы можете сделать то же самое с первым примером:

const char* = "My long string";
1
ответ дан 5 December 2019 в 04:42
поделиться

Рассмотрим использование потоков строк:

#include <iostream>
#include <sstream>

using namespace std;
int main ()
{
    int i = 10;

    stringstream t;

    t << "test " << i;

    cout << t.str();
}
0
ответ дан 5 December 2019 в 04:42
поделиться

Возможно, было бы лучше, если бы C++ перегрузил оператор "+", как вы показываете. К сожалению, они этого не сделали (хотя вы можете, если захотите).

Для преобразования целочисленных переменных в строки в C++ существует в основном три метода; два унаследованы от C и один новый для C++.

  1. Процедура itoa(). На самом деле она нестандартная, но в большинстве компиляторов она есть. Приятно то, что она возвращает указатель на строку, поэтому ее можно использовать в функциональном программировании.
  2. sprintf(). Вторая процедура, перешедшая из языка C, принимает строку назначения, строку формата и список параметров. Количество параметров и их интерпретация зависят от синтаксического анализа строки "формат". Это делает sprintf одновременно и очень мощным, и очень опасным. Если вы используете этот подход, я могу гарантировать, что вы получите ошибки при первых же попытках.
  3. std::ostringstream. Способ C++. Он обладает практически всеми возможностями sprintf(), но намного безопаснее. Недостатком здесь является то, что вы должны объявить его, и это не строка, поэтому вам все равно придется преобразовать его в строку, когда вы закончите. Это означает, что для того, чтобы сделать что-либо с ostringstream, требуется как минимум три строки кода. Кроме того, это очень некрасиво, особенно если вы попытаетесь использовать специальное форматирование.
0
ответ дан 5 December 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: