Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
fara-on
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 15
#1

Массив строк преобразовать в строку - C++

08.08.2013, 01:39. Просмотров 1684. Ответов 32
Метки нет (Все метки)

как преобразовать массив строк в строку через разделитель, то есть дано: "строка1" "строка2" "строка3"
а нужно получить "строка1, строка2, строка3"?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2013, 01:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив строк преобразовать в строку (C++):

Преобразовать массив Int в массив строк - C++
Помогите пожалуйста с решением. Нужно в каждый элемент массива string положитm элемент массива int. Т.е из int i={1,12,100} получить...

Преобразовать массив символов в строку - C++
Правильна ли запись в strs , нужно что бы значения переменных последовательно были записаны в strs для получения примерно такой строки...

ПреобразоваТЬ строку символов в массив - C++
#include <cstdio> #include <cctype> #include <iostream> #include <cmath> #include "QTime" void stuToArr(char s, int ar,...

Как преобразовать строку в массив чисел? - C++
символы вводятся через пробел. Программа сканирует только до пробела и делит цифру на числа. Как сделать чтобы оно сканировало цифры...

Обработка строк. Преобразовать строку, удалив из нее все символы, не являющиеся буквами или цифрами - C++
Дана строка символов. Преобразовать строку, удалив из нее все символы, не являющиеся буквами или цифрами.

Как преобразовать строку char в массив int? - C++
Дана строка символов S, состоящая из чисел, разделенных пробелами Нужно выделить числа и засунуть их в массив типа int; Как можно это...

32
ching0n
3 / 3 / 1
Регистрация: 06.08.2013
Сообщений: 23
08.08.2013, 01:47 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    string a[] = { "первый текст", "второй текст", "третий текст" };
    string b;
    for (int i = 0; i < 3; i++) {
        b += a[i] + ", ";
    }
    cout << b;
    return 0;
}
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.08.2013, 01:53 #3
Цитата Сообщение от fara-on Посмотреть сообщение
как преобразовать массив строк
Строк каких? В стиле С (массивы chr с терминальным '\0') или объекты string?
0
EggHead
0 / 0 / 0
Регистрация: 07.08.2013
Сообщений: 5
08.08.2013, 02:34 #4
Пожалуйста уточните информацию.
Язык, возможность использования библиотек, что подразумевается с точки языка/библиотеки под "строкой" итп.
0
fara-on
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 15
08.08.2013, 10:35  [ТС] #5
имеется массив строк, те двумерный массив, необходимо его представить в виде строки, те обычного массива с учетом разделителей
0
Catstail
Модератор
22909 / 11275 / 1833
Регистрация: 12.02.2012
Сообщений: 18,487
08.08.2013, 10:38 #6
ching0n, в конце будет лишняя запятая
0
fara-on
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 15
08.08.2013, 10:45  [ТС] #7
под строкой подразумевается массив
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
08.08.2013, 11:17 #8

Не по теме:

Цитата Сообщение от Catstail Посмотреть сообщение
в конце будет лишняя запятая
обычно на это даже компиляторы забивают болт и разрешают такое писать, например, в enum'ах или при инициализации массива.



Добавлено через 2 минуты
fara-on, выделяем память под суммарную строку с учетом длины исходных + разделитель + финальный ноль. Далее, последовательно выполняем strcat() в результирующую строку.
1
fara-on
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 15
08.08.2013, 11:28  [ТС] #9
вопрос только как это сделать)
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
08.08.2013, 11:43 #10
Цитата Сообщение от fara-on Посмотреть сообщение
вопрос только как это сделать)
если строго по тому, как я описал, то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <cstring>
 
int main()
{
    const char* arr[] = {"строка1","строка2","строка3"};
    const int size = sizeof(arr)/sizeof(*arr);
 
    int len = 0;
    for( int i=0; i<size; ++i )
    {
        len += strlen(arr[i]); // Сумма длин всех строк
    }
 
    len += size+1; // Добавляем на разделитель и финальный ноль
 
    char* result = new char[len];
    *result = 0; // Инициализируем итоговую строку
 
    for( int i=0; i<size; ++i )
    {
        strcat(result, arr[i]);
        strcat(result, "," );
    }
 
    std::cout << result << std::endl;
}
Хотя, лучше использовать std::string и его методы.
1
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
08.08.2013, 11:55 #11
Как вариант (надо бы проверить на работоспособность):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstring>
 
 
int main ( ) {
   const int size = 5 ;
   const char * arr [ size ] = { "string1" , "string2" , "string3" , "string4" , "string5" } ;
   int resultStringLength = 0 ;
   for ( int i = 0 ; i < size ; ++i ) { //Считаем длину всех строк
      resultStringLength += strlen ( arr [ i ] ) ; 
   }
   resultStringLength += (size-1) * 2 ; //Для разделителей ( запятая + пробел )
   char * resultString = new char [ resultStringLength + 1 ] ; // Выделяем память с учетом завершающего нуля
   resultString [ 0 ] = '\0' ; // "обнуляем" строку
   if ( size > 0 ) {
      strcat ( resultString , arr [ 0 ] ) ; //Добавляем первое слово
      for ( int i = 1 ; i < size ; ++i ) {
         strcat ( resultString , ", " ) ; // Добавляем запятую
         strcat ( resultString , arr [ i ] ) ; //Добавляем строку
      }
   }
   std::cout << resultString << std::endl ;
}
Tulosba, лишняя запятая в конце
0
fara-on
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 15
08.08.2013, 11:56  [ТС] #12
C++ (Qt)
1
  const int size = sizeof(arr)/sizeof(*arr);
Поясните пожалуйста эту строчку
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
08.08.2013, 12:22 #13
Цитата Сообщение от Croessmah Посмотреть сообщение
лишняя запятая в конце
см. сообщение #8

Добавлено через 31 секунду
Цитата Сообщение от fara-on Посмотреть сообщение
const int size = sizeof(arr)/sizeof(*arr);
вычисляем кол-во элементов в массиве

Добавлено через 2 минуты
Croessmah, и раз уже пошла тема про запятую, имхо, проще просто перезаписать в последнюю '\0'. Пожертвовав одним байтом.
0
Croessmah
08.08.2013, 12:25
  #14

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
см. сообщение #8
Цитата Сообщение от Tulosba Посмотреть сообщение
обычно на это даже компиляторы забивают болт и разрешают такое писать,
А собственно почему они должны запрещать?

0
Tulosba
08.08.2013, 12:36     Массив строк преобразовать в строку
  #15

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
А собственно почему они должны запрещать?
Ну так чего тогда до меня докопался? Если компилятору можно, я тоже хочу.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2013, 12:36
Привет! Вот еще темы с ответами:

Как строку, заполненную числами, преобразовать в числовой массив? - C++
Привет всем. Кто-нибудь знает как строку заполненную числами преобразовать в числовой массив? Сама смогла найти только как с помощью...

Корректно преобразовать массив кодов символов в строку string - C++
Здравствуйте уважаемые Гуру! Понадобилось обмениваться зашифрованными строками между php и С++ Нашел абсолютно рабочий алгоритм RC4...

Преобразовать массив цифр в строку для вывода на cout<< - C++
Реализую класс длинных чисел (только+). Числа представляю в виде массиве, где каждый элемент это цифра. Но не могу понять, как его...

Преобразовать двумерный массив в одномерный, удаляя каждую вторую строку - C++
Подскажите пожалуйста как 2D массив преобразовать в 1D, при этом удаляя каждую 2рую строку. Прилагаю свой вариант кода... Мб подскажите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
08.08.2013, 12:36
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.