|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Строки, массивы строк... |
|
C/C++ - Строки, массивы строк...
|
Старожил Сообщения: 361 |
Профиль | Отправить PM | Цитировать Каким образом в С работать со строками? (не массивами из символов)
Там вроде есть какой-то ньюанс, в отличие от Java, эти конструкции не очень-то работают: Как же всё-таки создать переменную типа String в C? Массив из переменных типа String? |
|
Отправлено: 15:21, 18-04-2010 |
Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать Цитата ManHack:
Если в C++, то подключаем заголовочный #include <string> и работаем. |
|
------- Отправлено: 15:50, 18-04-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 361
|
Профиль | Отправить PM | Цитировать Ясно, спасибо... как тогда будет выглядеть объявление массива из массивов из символов в Cи?
А каким образом можно сравнивать массивы из символов? (аналогично String.compareTo() в Java) |
Отправлено: 16:05, 18-04-2010 | #3 |
Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать Цитата ManHack:
Цитата ManHack:
|
||
------- Отправлено: 16:45, 18-04-2010 | #4 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать что понимается под массивом из String? в c/с++ нет класса String. Строки в С, а по наследству и в С++ представляются массивом сз элементов типа char или wchar_t, но в стандартной библиотеке C++, в пространстве имён std есть класс string, который удовлетворяет большинство потребностей в строках. Можно придумать свой класс String, работающий по собственным правилам (например это сделал borland, объявив классы AnsiString и WideString), но это излишне, если допускается использование std::string.
Теперь о массиве. Вообще конструкция допустима, но в стандартной библиотеке есть контейнер vector, позволяющий хранить объекты в виде массива и контейнер list, позволяющий хранить объекты в 2-связном списке. Таким образом, в зависимости от задумки автора, можно поступит двояко: Цитата ManHack:
// случайный доступ к элементам vector<string> str_arr1(str_num); // str_num пустых строк vector<string> str_arr2(str_num, string("********")); // str_num строк, инициализированных в "********" // только последовательный доступ list<string> str_list0; // пустой список строк list<string> str_list1(str_num); // str_num пустых строк list<string> str_list2(str_num, string("********")); // str_num строк, инициализированных в "********" Для сравнения строк переопределён оператор==(string const&, string const&), для сравнения контейнеров то же самое сделано для контейнеров. То есть: Теперь по поводу C: Далее буду считать, что автор темы отличает C от C++. Управление хранилищем полностью отводится на откуп прогаммиста. Поэтому надо заранее позаботиться о выделении и уничтожении памяти. Класса String в C нет. Вместо этого есть массив из char, в конце которого символ с кодом 0. Для сравнения строк функции strcmp, strcmpi или любая самописная, которая сравнивает поэлементно до тех пор, пока не встретит код 0. Сравнение массивов только самописное или не из стандартной библиотеки C. |
||
Отправлено: 17:45, 18-04-2010 | #5 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Здравствуйте!
Скажите пожалуйста как на обычном Си реализовать такое В соревнованиях по прыжкам в длину принимают участие 10 спортсменов. Считая заданным список фамилий спортсменов и их результаты в порядке стартовых номеров, получить итоговую таблицу, в которой содержатся фамилии и результаты в порядке занятых мест. не пойму как массивы строку работают, вылезает ошибка Null pointer assignment либо просто закрывается окно #include <stdio.h> #include <iostream.h> #include <iomanip.h> #include <string.h> main() { int r[10]; char *m[10]; int i,j,n; char *s; for(i=0; i<=9; i++) { cout<<"Vvedite familijy uchastnika"; cin>>m[i]; cout<<"Vvedite rezultat uchastnika"<<endl; cin>>r[i]; } cout<<endl<<endl; printf("Vveden \n"); for(i=0; i<=9; i++) { cout<<m[i]<<" "; cout<<r[i]<<" "<<endl; } printf("\n"); printf("\n"); for(i=0; i<=8; i++) { for(j=i; j<=9; j++) { if (r[i]<r[j]) { n=r[j]; r[j]=r[i]; r[i]=n; s=m[j]; m[j]=m[i]; m[i]=s; } } } printf("Otvet \n"); cout <<endl; for(i=0; i<=9; i++) { cout<<m[i]<<" "; cout<<r[i]<<" "<<endl; } return 0; } |
Отправлено: 18:36, 27-04-2011 | #6 |
ИО Капитана Очевидности Сообщения: 5383
|
Профиль | Отправить PM | Цитировать Цитата otkryto:
// в коде программы const char *Stroka = "Hello Word"; // в отладчике Значение Stroka будет равна "Hello Word\0" Значения *Stroka и Stoka[0] будут равны 'H' Значения *(Stroka+1) и Stroka[1] будут равны 'e' В С нет объекта "строка" - есть "массив символов, оканчивающийся нулём" (символом с кодом "ноль"), который компилятором и отладчиком обрабатывается особым образом, создавая over 9000 проблем любому начинающему программисту. У меня сейчас нет времени полноценную лекцию по данной теме писать, ибо она слишком большая и сложная. Придётся послать вас в гугль |
|
------- Отправлено: 06:31, 29-04-2011 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
C/C++ - Массивы+функция | JamesB | Программирование и базы данных | 1 | 01-04-2010 22:16 | |
MySQL - Автозамена строки из другой строки - trigger? procedure ? | BugZZ | Программирование и базы данных | 0 | 18-09-2009 09:51 | |
C/C++ - Массивы | SS3 | Программирование и базы данных | 3 | 29-04-2009 21:47 | |
Массивы в С++ | Guest | Программирование и базы данных | 2 | 27-09-2004 10:12 | |
C++ и массивы ? | IG | Программирование и базы данных | 9 | 09-06-2003 09:33 |
|