C ++: Как построить Strings / char * - PullRequest
7 голосов
/ 18 февраля 2010

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

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

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

Я сосредоточился на вставке целого числа после строки.

Ответы [ 6 ]

30 голосов
/ 18 февраля 2010

Вы почти наверняка не хотите иметь дело с 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 ++. Если вы еще не купили его, получите Ускоренный C ++ . Вы не можете изучать C ++ только из интернет-ресурсов.

7 голосов
/ 18 февраля 2010

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

char* s = // initialized properly
sprintf( s, "You: %d CPU: %d", player, cpu );
2 голосов
/ 18 февраля 2010

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

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

1 голос
/ 18 февраля 2010

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";
0 голосов
/ 18 февраля 2010

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

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

  1. Подпрограмма itoa () .Это на самом деле нестандартно, но у большинства компиляторов это есть.Приятно то, что он возвращает указатель на строку, поэтому его можно использовать в программировании в функциональном стиле.
  2. sprintf () .Во втором удержании от C эта процедура принимает строку назначения, строку формата и список параметров.Сколько существует параметров и как они интерпретируются, зависит от того, как анализируется строка «format».Это делает спринт одновременно чрезвычайно мощным и чрезвычайно опасным.Если вы воспользуетесь этим подходом, я могу в значительной степени гарантировать, что в первые несколько попыток у вас будут сбои.
  3. std :: ostringstream .C ++ способ.В нем почти вся мощь sprintf (), но на намного * на 1017 * безопаснее.Недостатком здесь является то, что вы должны объявить его, и это , а не строка, поэтому вам все равно придется преобразовать его в единицу, когда вы закончите.Это означает, что как минимум три строки кода необходимы для выполнения всего с потоком ostring.Это также очень уродливо, особенно если вы попробуете какое-то специальное форматирование.
0 голосов
/ 18 февраля 2010

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

#include <iostream>
#include <sstream>

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

    stringstream t;

    t << "test " << i;

    cout << t.str();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...