0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 15
1

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

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

Author24 — интернет-сервис помощи студентам
как преобразовать массив строк в строку через разделитель, то есть дано: "строка1" "строка2" "строка3"
а нужно получить "строка1, строка2, строка3"?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2013, 01:39
Ответы с готовыми решениями:

Преобразовать матрицу: поэлементно вычесть последнюю строку из всех строк, кроме последней
дана вещественная матрица М (9x8). Преобразовать матрицу: поэлементно вычесть последнюю строку из...

Преобразовать массив Int в массив строк
Помогите пожалуйста с решением. Нужно в каждый элемент массива string положитm элемент массива int....

ПреобразоваТЬ строку символов в массив
#include <cstdio> #include <cctype> #include <iostream> #include <cmath> #include "QTime" ...

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

32
3 / 3 / 3
Регистрация: 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
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.08.2013, 01:53 3
Цитата Сообщение от fara-on Посмотреть сообщение
как преобразовать массив строк
Строк каких? В стиле С (массивы chr с терминальным '\0') или объекты string?
0
0 / 0 / 0
Регистрация: 07.08.2013
Сообщений: 5
08.08.2013, 02:34 4
Пожалуйста уточните информацию.
Язык, возможность использования библиотек, что подразумевается с точки языка/библиотеки под "строкой" итп.
0
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 15
08.08.2013, 10:35  [ТС] 5
имеется массив строк, те двумерный массив, необходимо его представить в виде строки, те обычного массива с учетом разделителей
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36578 / 20308 / 4218
Регистрация: 12.02.2012
Сообщений: 33,607
Записей в блоге: 13
08.08.2013, 10:38 6
ching0n, в конце будет лишняя запятая
0
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 15
08.08.2013, 10:45  [ТС] 7
под строкой подразумевается массив
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
08.08.2013, 11:17 8

Не по теме:

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



Добавлено через 2 минуты
fara-on, выделяем память под суммарную строку с учетом длины исходных + разделитель + финальный ноль. Далее, последовательно выполняем strcat() в результирующую строку.
1
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 15
08.08.2013, 11:28  [ТС] 9
вопрос только как это сделать)
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
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
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 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
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 15
08.08.2013, 11:56  [ТС] 12
C++ (Qt)
1
  const int size = sizeof(arr)/sizeof(*arr);
Поясните пожалуйста эту строчку
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
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
nonedark2008
08.08.2013, 12:53
  #16

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Если компилятору можно, я тоже хочу.
Угу и преподу/заказчику так же: раз компилятору можно так запятую ставить, то я тоже буду - пофигу что в примере ее нету.

0
Croessmah
08.08.2013, 12:59
  #17

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Ну так чего тогда до меня докопался?
Мне просто не понятно каким боком тут компилятор вообще?
Да и какую ошибку он должен выдать - "В сформированной Вами строке в конце присутствует лишняя запятая"?
Название: Безымянный.png
Просмотров: 86

Размер: 740 байт

0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
08.08.2013, 13:43 18
Цитата Сообщение от Croessmah Посмотреть сообщение
Мне просто не понятно каким боком тут компилятор вообще?
C++
1
2
enum e { one, };
int v[] = {1,2,3,};
Добавлено через 3 минуты
А чтобы избавиться от запятой в конце, достаточно добавить одну строку:
C++
1
result[strlen(result)-1] = 0;
0
Croessmah
08.08.2013, 13:51
  #19

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
C++
1
int v[] = {1,2,3,};
какое отношения эта запятая имеет к запятой в сформированном тексте?
На которую, собственно, и указал Catstail в посте #6
Цитата Сообщение от Catstail Посмотреть сообщение
ching0n, в конце будет лишняя запятая
и я в посте #11
Цитата Сообщение от Croessmah Посмотреть сообщение
Tulosba, лишняя запятая в конце

0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
08.08.2013, 14:03 20
Цитата Сообщение от Croessmah Посмотреть сообщение
какое отношения эта запятая имеет к запятой в сформированном тексте?
Ровно то, что во всех случаях речь идет о "запятой в конце последовательности".
Что даже разработчики компилятора разрешили писать ее в конце перечислений, чтобы не накладывать лишних ограничений на генераторы кода. У ТС по сути как раз генерация последовательности. Короче, для ТС есть решения как с запятой, так и без - пусть выбирает любое. Я, вроде бы, всё сказал, что хотел
0
08.08.2013, 14:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.08.2013, 14:03
Помогаю со студенческими работами здесь

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

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

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

Каким образом с клавиатуры можно ввести текст (последовательность строк), и преобразовать это все в одну строку
Прошу вас помочь мне разобраться с одним вопросом: каким образом с клавиатуры можно ввести текст...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru