Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.91
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
#1

массив string - C++

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void func(string *mas)
{
//здесь
}
 
int main()
{
string s[] =
{
   "one",
   "two",
   "three"
};
func(s);
}
как в функции узнать сколько элементов содержит переданный ей массив string?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6550 / 3970 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.07.2011, 13:11     массив string #2
никак) только предавать размер
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
25.07.2011, 13:14  [ТС]     массив string #3
Цитата Сообщение от Maxwe11 Посмотреть сообщение
никак)


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

Цитата Сообщение от Mayonez Посмотреть сообщение
а как тогда в main() подсчитать количество элементов?
C++
1
std::cout << sizeof(s) / sizeof(std::string) << std::endl;
Kastaneda
Форумчанин
Эксперт С++
4470 / 2832 / 224
Регистрация: 12.12.2009
Сообщений: 7,202
Записей в блоге: 1
Завершенные тесты: 1
25.07.2011, 18:02     массив string #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);
}
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
25.07.2011, 18:55     массив string #6
vector (list/deque/..) надо использовать
во всех случаях, ну может быть только кроме случая, когда время жизни объекта очень мало.
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
27.07.2011, 18:48  [ТС]     массив string #7
Цитата Сообщение от fasked Посмотреть сообщение
vector
вектор нельзя так удобно инициализировать
Jupiter
Каратель
Эксперт С++
6550 / 3970 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.07.2011, 18:55     массив string #8
Цитата Сообщение от Kastaneda Посмотреть сообщение
{
"one",
"two",
"three"
};
вектор тоже можно так иницилизировать но только в новых версиях gcc/MinGW
Ma3a
Эксперт C++
616 / 460 / 31
Регистрация: 28.01.2011
Сообщений: 605
27.07.2011, 19:00     массив string #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 << ' ';
            }
    );
    }
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
27.07.2011, 19:08     массив string #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;
}
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
27.07.2011, 19:10  [ТС]     массив string #11
Цитата Сообщение от Ma3a Посмотреть сообщение
boost::assign
а это что?
Ma3a
Эксперт C++
616 / 460 / 31
Регистрация: 28.01.2011
Сообщений: 605
27.07.2011, 19:12     массив string #12
Mayonez, пространство имён библиотеки assign, входящей в набор библиотек boost, чтобы можно было просто записать в стиле vec += ..., а не писать полный доступ к оператору += через функциональную форму. Библиотека создавалась как раз для того, чтобы можно было удобно присваивать и добавлять значения в различные контейнеры.
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
29.07.2011, 15:35  [ТС]     массив string #13
Цитата Сообщение от Maxwe11 Посмотреть сообщение
вектор тоже можно так иницилизировать но только в новых версиях gcc/MinGW
скачал последнюю minwg - не инициализируется
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.07.2011, 15:35     массив string #14
Mayonez, попробуйте откомпилировать с параметром
Код
-std=c++0x
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
29.07.2011, 15:58  [ТС]     массив string #15
Цитата Сообщение от Mayonez Посмотреть сообщение
но только в новых версиях gcc/MinGW
fasked, тоесть имеется ввиду новый стандарт языка?
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.07.2011, 16:00     массив string #16
Цитата Сообщение от Mayonez Посмотреть сообщение
тоесть имеется ввиду новый стандарт языка?
Да, списки инициализации это фишка из нового стандарта.
-=ЮрА=-
Заблокирован
Автор FAQ
29.07.2011, 16:58     массив string #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;
}
Миниатюры
массив string  
Jupiter
Каратель
Эксперт С++
6550 / 3970 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
29.07.2011, 17:00     массив string #18
-=ЮрА=-, почему не обобщенным шаблоном?
-=ЮрА=-
Заблокирован
Автор FAQ
29.07.2011, 17:03     массив string #19
Почему char ** вместо string, впринципе ничего не измениться если поставить string
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2011, 17:08     массив string
Еще ссылки по теме:

Преобразовать string в массив char C++
Преобразовать string в массив byte[] C++
Динамический массив string и его вывод C++
Как вписать string в массив? C++
Преобразование из string в массив char C++

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

Или воспользуйтесь поиском по форуму:
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
29.07.2011, 17:08  [ТС]     массив string #20
-=ЮрА=-, в том то и дело что изменится...
Yandex
Объявления
29.07.2011, 17:08     массив string
Ответ Создать тему
Опции темы

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