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

В паскале это называется String - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Fermion
 Аватар для Fermion
17 / 17 / 1
Регистрация: 05.10.2009
Сообщений: 168
28.10.2009, 11:32     В паскале это называется String #1
Чем больше я изучаю С, тем больше понимаю, что этот язык придумали извращенцы.

В общем это... в паскале это делается так:
Pascal
1
2
Z String;
Z := "Тра-ля-ля";
И ВСЁ!!! НИКАКОГО ГЕМОРРОЯ!!! Дальше я могу с этой переменно делать что угодно и как угодно. Ну в пределах возможности данного типа переменной конечно.

Блин! Как мне получить такую же переменную (которая просто хранит строку текста) в этом извращенном языке С ???

Как я понял там должна быть какая-то непонятного вида конструкция типа:
C++
1
char str1[10];
и как мне к этому потом пришить переменную и как с этой переменной потом работать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mamedovvms
2915 / 836 / 93
Регистрация: 30.04.2009
Сообщений: 2,614
28.10.2009, 11:34     В паскале это называется String #2
а разве нельзя написать так
C++
1
string s="lkzsskaldhf";
oxotnik
 Аватар для oxotnik
1585 / 1062 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
28.10.2009, 11:35     В паскале это называется String #3
переходи на С++ и используй std::string и никакого геморроя
или в С
Код
char *str = "SomeString"; // правда с памятью потом в ручную работать, если длина изментся
Fermion
 Аватар для Fermion
17 / 17 / 1
Регистрация: 05.10.2009
Сообщений: 168
28.10.2009, 11:36  [ТС]     В паскале это называется String #4
Цитата Сообщение от mamedovvms Посмотреть сообщение
а разве нельзя написать так
C++
1
string s="lkzsskaldhf";
Грит что не знает что такое string.

Мей би чтобы он узнал ему надо че нить подключить? Ну типа я имею ввиду вот это: #include <vcl.h>
oxotnik
 Аватар для oxotnik
1585 / 1062 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
28.10.2009, 11:39     В паскале это называется String #5
Цитата Сообщение от Fermion Посмотреть сообщение
Грит что не знает что такое string.

Мей би чтобы он узнал ему надо че нить подключить? Ну типа я имею ввиду вот это: #include <vcl.h>
если в билдере работаешь, так там тоже самое что и в делфи - те же классы по работе со строкой.
Fermion
 Аватар для Fermion
17 / 17 / 1
Регистрация: 05.10.2009
Сообщений: 168
28.10.2009, 11:41  [ТС]     В паскале это называется String #6
Цитата Сообщение от oxotnik Посмотреть сообщение
переходи на С++ и используй std::string и никакого геморроя
А можно для меня, как для ламера, поподробнее с этого момента? Тип переменно как называется?

Цитата Сообщение от oxotnik Посмотреть сообщение
правда с памятью потом в ручную работать, если длина изментся[/CODE]
Вот этого мне хотелось бы меньше всего.
oxotnik
 Аватар для oxotnik
1585 / 1062 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
28.10.2009, 11:50     В паскале это называется String #7
Цитата Сообщение от Fermion Посмотреть сообщение
А можно для меня, как для ламера, поподробнее с этого момента? Тип переменно как называется?
Код
#include <string>
int main ()
{
   std::string str = "some string";
   str+= " some string2";
   return 0;
}
это класс-контейнер для работы со строками, это не встроенный тип
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
28.10.2009, 11:56     В паскале это называется String #8
в общем если учишься программировать наверно лучше будет visual C++ 2008 prof edition хотя для начала и express edition пойдёт там создашь консольный проект , как тебе писали подключаешь #include <string> , string это класс определённый в пространстве имён std:: чтобы объявить объект этого класса напишешь string s ; можешь сразу его инициализировать с помощью конструктора типа string s("lala"); дальше с помощью методов класса string можешь работать с этой строкой s.length() - длина этой строки и так далее насчёт методов загляни сюда www.cplusplus.com
Fermion
 Аватар для Fermion
17 / 17 / 1
Регистрация: 05.10.2009
Сообщений: 168
28.10.2009, 11:57  [ТС]     В паскале это называется String #9
Цитата Сообщение от oxotnik Посмотреть сообщение
Код
#include <string>
int main ()
{
   std::string str = "some string";
   str+= " some string2";
   return 0;
}
это класс-контейнер для работы со строками, это не встроенный тип
А дальше то что с этим делать? Мне нужна переменная типа string. К примеру: Z= 'Hello Word'; Как мне терь к этому прикрутить Z ? Как её описать?
blackswan
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 61
28.10.2009, 11:59     В паскале это называется String #10
Fermion, str - это и есть Z,
C++
1
std::string Z = "Hello world";
видимо лучше послушать совет Андрейки.

для удобства
C++
1
using namespace std;
в начале файла-кода, чтоб не писать каждый раз
C++
1
std::
при работе с строкой
Fermion
 Аватар для Fermion
17 / 17 / 1
Регистрация: 05.10.2009
Сообщений: 168
28.10.2009, 12:29  [ТС]     В паскале это называется String #11
Цитата Сообщение от blackswan Посмотреть сообщение
Fermion, str - это и есть Z,
Всё.. спасибо... разобрался.



В общем в начале проги вот это:
Цитата Сообщение от oxotnik Посмотреть сообщение
Код
#include <string>
int main ()
{
   std::string str = "some string";
   str+= " some string2";
   return 0;
}
А перед объявлением переменной вот это:
Цитата Сообщение от blackswan Посмотреть сообщение
C++
1
std::string Z = "Hello world";
Так всё работает. Спасибо всем ещё раз!
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
29.10.2009, 03:16     В паскале это называется String #12
Цитата Сообщение от Fermion
В общем это... в паскале это делается так:
В паскале это встроено прямо в язык, а C сделан по принципу: ядро маленькое, а всё остальное подключается
когда какая-та из технологий устаревает, её просто переписывают, не меняя языка (его реализации в компиляторе, так как достаточно переписать библиотеку или просто пересобрать её, заменив одну функцию)

C
1
    char s[100] = "abcd";
C
1
2
3
4
5
#include <stdio.h>
 
    char s[100];
 
    sprintf(s, "abcd");
C
1
2
3
4
5
#include <string.h>
 
    char s[100];
 
    strcpy(s, "abcd");
C
1
2
3
4
5
6
7
    char s[100];
 
    s[0] = 'a';
    s[1] = 'b';
    s[2] = 'c';
    s[3] = 'd';
    s[4] = '\0';
паскалевские знания лучше отбросить
Fermion
 Аватар для Fermion
17 / 17 / 1
Регистрация: 05.10.2009
Сообщений: 168
29.10.2009, 19:31  [ТС]     В паскале это называется String #13
Цитата Сообщение от accept Посмотреть сообщение
C
1
    char s[100] = "abcd";
C
1
2
3
4
5
#include <stdio.h>
 
    char s[100];
 
    sprintf(s, "abcd");
C
1
2
3
4
5
#include <string.h>
 
    char s[100];
 
    strcpy(s, "abcd");
C
1
2
3
4
5
6
7
    char s[100];
 
    s[0] = 'a';
    s[1] = 'b';
    s[2] = 'c';
    s[3] = 'd';
    s[4] = '\0';
А переменная-то где?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
30.10.2009, 05:55     В паскале это называется String #14
массив будет работать как переменная во всех контекстах, если тебя не устраивает его дополнительный размер, на этот счёт есть функции выделения памяти ровно столько, сколько надо
Fermion
 Аватар для Fermion
17 / 17 / 1
Регистрация: 05.10.2009
Сообщений: 168
30.10.2009, 22:13  [ТС]     В паскале это называется String #15
Цитата Сообщение от accept Посмотреть сообщение
массив будет работать как переменная во всех контекстах
Это КАК?

Блин.. не понимаю. Давайте на конкретном примере. Вот программка на Дельфи... она работает:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
z :String;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
z := 'Hello World';
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
if z = 'Hello World' then z := 'Привет Мир'
else z := 'Hello World';
Label1.Caption := z;
end;
А теперь объясните мне тупому КАК я могу на С++Builder полю Label1->Caption присвоить массив? И как и с чем я должен сравнивать массив? Как реализовать такую же программу на C++ ?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
02.11.2009, 01:55     В паскале это называется String #16
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
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <string.h>
 
void Input(char *l);
void Change(char *l);
void Print(char *l);
 
main()
{
    char msg[100];
    
    Input(msg);
    
    Change(msg);
    
    Print(msg);
    
    return 0;
}
 
void Input(char *l)
{
    sprintf(l, "Hello, World!");
}
 
void Change(char *l)
{
    const char *m = "Привет, Мир!"; 
    
    if (strcmp(l, m))
        sprintf(l, "%s", m);
}
 
void Print(char *l)
{
    printf("%s" "\n", l);
}
для C++ юзается string

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
#include <iostream>
 
using namespace std;
 
int main(void)
{
    string s;
    
    s = "Hello";
    
    if (s == "Hello")
        s = "Привет";
        
    cout << s << endl;
    
    return 0;
}
операции сравнения и присваивания просто перегружены (то есть, вместо операции выполняется функция, которая что-то делает)

Добавлено через 5 минут
Цитата Сообщение от Fermion
полю Label1->Caption присвоить массив?
strcpy, если Label1->Caption - строка для символов, а не структура какая-нибудь
-MefistofeL-
 Аватар для -MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
02.11.2009, 02:08     В паскале это называется String #17
в общем в строке
C++
1
char s[100];
создается массив из 100 элементов типа char (один символ) благодаря уневирсальности языка (он в какойто степени отличает char от остальных типов) мы можем написать
C++
1
s= "abcd";
этим самым заняв 4 ячейки памяти из ста в массиве s. Если не было бы этой уневирсальности, пришлось бы в каждую ячейку вбивать по символу:
C++
1
2
3
4
s[0]='a';
s[1]='b';
s[2]='c';
s[3]='d';
все легко и просто))
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
02.11.2009, 10:18     В паскале это называется String #18
но только при инициализации, при инициализации символы скопируются в массив, а без инициализации будет попытка присвоить массиву адрес строки "abcd"
все строки сохраняются в статической области памяти, их можно копировать из этой области в массив с помощью strcpy, от начала массива можно легко смещаться
C
1
    strcpy(s+3, "abcd");
скопирует в массив s через три символа (то есть перешагнёт через три первых символа)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2009, 11:12     В паскале это называется String
Еще ссылки по теме:

C++ Как называется программа для работы в сфере с++?
«Структура в структуре» - как правильно называется? C++
C++ Как называется компонентная функция?
C++ Квадратная матрица A называется ортогональной, если AT=A-1
C++ Как называется функция

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

Или воспользуйтесь поиском по форуму:
-MefistofeL-
 Аватар для -MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
02.11.2009, 11:12     В паскале это называется String #19
ну да... это уже детали)) хоть и важные...
Yandex
Объявления
02.11.2009, 11:12     В паскале это называется String
Ответ Создать тему
Опции темы

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