Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.91
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
#1

массив string - C++

25.07.2011, 13:08. Просмотров 2964. Ответов 22
Метки нет (Все метки)


http://www.cyberforum.ru/cpp-beginners/thread158479.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2011, 13:08
Я подобрал для вас темы с готовыми решениями и ответами на вопрос массив string (C++):

Доступ к паре в map<string, vector<pair<string, string>>>Temp
Подскажите пожалуйста как получить данные в векторе пар ? void...

String в массив
Нужно из string слова разделенные пробелами занести в массив каждое слово...

string массив
Как создать массив в который буду я вводить данные ? Написал не большой код...

string и массив строк
у меня массив строк = 'aaaaaaaa'; = 'xxx()'; = 'ddddd'; = 'eeeeee'; ...

Fn(string s) - в массив функций
Есть различные функции хэширования string f1(string s) f2(string s) ......

22
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.07.2011, 13:11 #2
никак) только предавать размер
0
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
25.07.2011, 13:14  [ТС] #3
Цитата Сообщение от Maxwe11 Посмотреть сообщение
никак)


а как тогда в main() подсчитать количество элементов?
0
nameless
Эксперт С++
338 / 302 / 36
Регистрация: 16.06.2009
Сообщений: 486
25.07.2011, 13:17 #4
Mayonez,

Цитата Сообщение от Mayonez Посмотреть сообщение
а как тогда в main() подсчитать количество элементов?
C++
1
std::cout << sizeof(s) / sizeof(std::string) << std::endl;
0
Kastaneda
Jesus loves me
Эксперт С++
4759 / 2962 / 340
Регистрация: 12.12.2009
Сообщений: 7,520
Записей в блоге: 2
Завершенные тесты: 1
25.07.2011, 18:02 #5
Лучший ответ Сообщение было отмечено как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template<size_t N>
void func(std::string (&mas)[N])
{
std::cout <<N << std::endl;
}
 
int main()
{
std::string s[] =
{
   "one",
   "two",
   "three"
};
func(s);
}
3
fasked
Эксперт С++
4976 / 2556 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
25.07.2011, 18:55 #6
vector (list/deque/..) надо использовать
во всех случаях, ну может быть только кроме случая, когда время жизни объекта очень мало.
2
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
27.07.2011, 18:48  [ТС] #7
Цитата Сообщение от fasked Посмотреть сообщение
vector
вектор нельзя так удобно инициализировать
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.07.2011, 18:55 #8
Цитата Сообщение от Kastaneda Посмотреть сообщение
{
"one",
"two",
"three"
};
вектор тоже можно так иницилизировать но только в новых версиях gcc/MinGW
0
Ma3a
Эксперт С++
619 / 463 / 57
Регистрация: 28.01.2011
Сообщений: 605
27.07.2011, 19:00 #9
Mayonez, ну смотря насколько удобно, например можно вот так с помощью boost::assign

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <boost/assign/std/vector.hpp>
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
using namespace boost::assign;
 
int main()
    {
    std::vector<std::string> svec;
    svec += "one" , "two" , "three";
    std::for_each(svec.begin(), svec.end(), [](std::string const & s)
            {
            std::cout << s << ' ';
            }
    );
    }
2
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
27.07.2011, 19:08 #10
Цитата Сообщение от Mayonez Посмотреть сообщение
вектор нельзя так удобно инициализировать
На одну строчку больше
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
 
int main(){
    const char * arr[] = { "One", "Two", "Three" };
    std::vector<std::string> vec(arr, arr + sizeof(arr) / sizeof(*arr));
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
    
    return 0;
}
1
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
27.07.2011, 19:10  [ТС] #11
Цитата Сообщение от Ma3a Посмотреть сообщение
boost::assign
а это что?
0
Ma3a
Эксперт С++
619 / 463 / 57
Регистрация: 28.01.2011
Сообщений: 605
27.07.2011, 19:12 #12
Mayonez, пространство имён библиотеки assign, входящей в набор библиотек boost, чтобы можно было просто записать в стиле vec += ..., а не писать полный доступ к оператору += через функциональную форму. Библиотека создавалась как раз для того, чтобы можно было удобно присваивать и добавлять значения в различные контейнеры.
1
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
29.07.2011, 15:35  [ТС] #13
Цитата Сообщение от Maxwe11 Посмотреть сообщение
вектор тоже можно так иницилизировать но только в новых версиях gcc/MinGW
скачал последнюю minwg - не инициализируется
0
fasked
Эксперт С++
4976 / 2556 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.07.2011, 15:35 #14
Mayonez, попробуйте откомпилировать с параметром
Код
-std=c++0x
0
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
29.07.2011, 15:58  [ТС] #15
Цитата Сообщение от Mayonez Посмотреть сообщение
но только в новых версиях gcc/MinGW
fasked, тоесть имеется ввиду новый стандарт языка?
0
fasked
Эксперт С++
4976 / 2556 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.07.2011, 16:00 #16
Цитата Сообщение от Mayonez Посмотреть сообщение
тоесть имеется ввиду новый стандарт языка?
Да, списки инициализации это фишка из нового стандарта.
0
-=ЮрА=-
Заблокирован
Автор FAQ
29.07.2011, 16:58 #17
Я реализовывал подобное вот так
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
#include <windows.h>
#include <stdio.h>
 
int func(char ** mas)
{
    int i = 0;
    while(mas[i] != NULL)
        i++;
    return i;
}
 
int main()
{
    char * s[] =
    {
       "one",
       "two",
       "three",
       NULL
    };
    printf("String contain %d substrings\r\n",func(s));
    system("pause");
    return 0;
}
0
Миниатюры
массив string  
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
29.07.2011, 17:00 #18
-=ЮрА=-, почему не обобщенным шаблоном?
0
-=ЮрА=-
Заблокирован
Автор FAQ
29.07.2011, 17:03 #19
Почему char ** вместо string, впринципе ничего не измениться если поставить string
0
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
29.07.2011, 17:08  [ТС] #20
-=ЮрА=-, в том то и дело что изменится...
0
29.07.2011, 17:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2011, 17:08
Привет! Вот еще темы с решениями:

Чтение из файла в массив string
Есть файл с 50 строками (в конце последней - '\n') и код чтения строк в массив...

Присвоить string'y массив char
char name1 = &quot;helloPeople&quot;; std::string name2; name2 = name1; // как можно...

Преобразовать string в массив byte[]
Привет. У меня есть строка к примеру &quot;test&quot; в ней 4 байта? Перевести ее в...

Преобразование координат из STRING в массив
Вот такой вод код выдает ошибку уже при запуске компилируется запускается...


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

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

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