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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Fermion
17 / 17 / 1
Регистрация: 05.10.2009
Сообщений: 168
#1

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

28.10.2009, 11:32. Просмотров 1182. Ответов 18
Метки нет (Все метки)

Чем больше я изучаю С, тем больше понимаю, что этот язык придумали извращенцы.

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

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

Как я понял там должна быть какая-то непонятного вида конструкция типа:
C++
1
char str1[10];
и как мне к этому потом пришить переменную и как с этой переменной потом работать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mamedovvms
2916 / 837 / 93
Регистрация: 30.04.2009
Сообщений: 2,624
28.10.2009, 11:34     В паскале это называется String #2
а разве нельзя написать так
C++
1
string s="lkzsskaldhf";
oxotnik
1586 / 1063 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
28.10.2009, 11:35     В паскале это называется String #3
переходи на С++ и используй std::string и никакого геморроя
или в С
Код
char *str = "SomeString"; // правда с памятью потом в ручную работать, если длина изментся
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
1586 / 1063 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
28.10.2009, 11:39     В паскале это называется String #5
Цитата Сообщение от Fermion Посмотреть сообщение
Грит что не знает что такое string.

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

Цитата Сообщение от oxotnik Посмотреть сообщение
правда с памятью потом в ручную работать, если длина изментся[/CODE]
Вот этого мне хотелось бы меньше всего.
oxotnik
1586 / 1063 / 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
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
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
4820 / 3240 / 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
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
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
30.10.2009, 05:55     В паскале это называется String #14
массив будет работать как переменная во всех контекстах, если тебя не устраивает его дополнительный размер, на этот счёт есть функции выделения памяти ровно столько, сколько надо
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
4820 / 3240 / 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-
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
4820 / 3240 / 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++ String to string *ABCD*(41 42 43 44) -> *«Í*(AB CD)
Как называется такой объект? C++
C++ Как называется компонентная функция?
Квадратная матрица A называется ортогональной C++
Как называется эта штука? C++

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

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

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