Как скопировать строку в строку фиксированной длины в C ++ - PullRequest
1 голос
/ 27 февраля 2010

У меня есть строка, которую я хочу скопировать в строку фиксированной длины. Например, у меня есть string s = "this is a string" длиной 16 символов.

Я хочу скопировать это в строку фиксированной длины s2 длиной 4 символа. Так что s2 будет содержать "this".

Я также хочу скопировать его в строку фиксированной длины s3 длиной 20 символов. Конец строки будет иметь дополнительные пробелы, поскольку длина исходной строки составляет всего 16 символов.

Ответы [ 6 ]

6 голосов
/ 27 февраля 2010
s.resize(expected_size,' '); 
3 голосов
/ 27 февраля 2010

Если вы используете std :: string, посмотрите substr, чтобы скопировать первую часть строки, конструктор string(const char *s, size_t n), чтобы создать строку длиной n с содержимым s (повторяется) и replace, чтобы заменить части вашей пустой строки, они сделают всю работу за вас.

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

Если вы хотите что-то повторно использовать, вы можете написать пару вспомогательных функций:

// Non-mutating version of string::resize
std::string resize_copy(std::string const & str, std::size_t new_sz)
{
    std::string copy = str;
    copy.resize(new_sz);
    return copy;
}

void resize_to(std::string const & str, std::string & dest)
{
    dest = resize_copy(str, dest.size());
}

int main()
{
    std::string a = "this is a string";
    std::string b(4, ' ');
    std::string c(20, ' ');
    resize_to(a, b);
    resize_to(a, c);
    std::cout << b << "|\n" << c << "|\n";
}

Это печатает:

this|
this is a string    |
1 голос
/ 27 февраля 2010

substr и resize / replace будут делать то, что вы хотите:

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

int main()
{
    string s = "abcdabcdabcdabcd";
    string t;
    string u;

    t = s.substr(0,4);
    u = s;
    u.resize(20, ' ');

    string v(20, ' ');
    v.replace(0, s.length(), s);

    cout << "(" << s << ")" << endl
         << "(" << t << ")" << endl
         << "(" << u << ")" << endl
         << "(" << v << ")" << endl;
}    
0 голосов
/ 31 июля 2013

Для обработки строк фиксированной длины в C ++ используйте функции C lib, такие как strncpy.

0 голосов
/ 27 февраля 2010

Для строк с нулевым символом в конце вы можете использовать sprintf .

Пример:

   char* s1 = "this is a string";
   char  s2[10];
   int   s2_size = 4;
   sprintf(s2, "%-*.*s", s2_size, s2_size, s1);
   printf("%s\n", s2);

%-*.*s спецификаторы формата корректируют размер строки и добавляют дополнительные пробелы, если это необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...