Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
1

Работа с объектами типа string

06.04.2013, 00:35. Просмотров 1915. Ответов 28
Метки нет (Все метки)

Здравия желаю!

Возник вопрос по строкам.

При таком коде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
#include<conio.h>
using namespace std;
 
int main(void)
{
    //В комментариях-мое понимание происходящего
    char g='\0';         //Инициализируется переменная типа чар значением нулевого байта
    int n=30;            //Инициализируется переменная типа int значением 30
    string res(g,n);    //Вызывается конструктор объекта типа string(заполнение символами g строки из n элементов)
    
    for(char i=65;i<65+n;i++)              //От буквы А до чего-то там
    {
        g=i;                                   //Присвоить g значение i
        res.insert(res.length(),&g);    //Вставить в последний элемент строки символ, находящийся по адресу &g
 
        for(unsigned int j=0;j<res.length()+1;j++)cout<<res[j]; //Собственно вывод
        cout<<endl;
    }
    _getch();
    return 0;
}
вывод получается такой
Кликните здесь для просмотра всего текста
A
ABA
ABACABA
ABACABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACAB A
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABA
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABA

ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB A
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABA
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABA

ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACAB A
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACAB APЁИ¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACAB APЁИ¶☺ABADABACABAQЁИ¶☺ABADABAC ABA
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACAB APЁИ¶☺ABADABACABAQЁИ¶☺ABADABAC ABARPЗ¶☺ABADABACABA

ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACAB APЁИ¶☺ABADABACABAQЁИ¶☺ABADABAC ABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACAB APЁИ¶☺ABADABACABAQЁИ¶☺ABADABAC ABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACAB A
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACAB APЁИ¶☺ABADABACABAQЁИ¶☺ABADABAC ABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACAB AUPЗ¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACAB APЁИ¶☺ABADABACABAQЁИ¶☺ABADABAC ABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACAB AUPЗ¶☺ABADABACABAVPЗ¶☺ABADABAC ABA
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACAB APЁИ¶☺ABADABACABAQЁИ¶☺ABADABAC ABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACAB AUPЗ¶☺ABADABACABAVPЗ¶☺ABADABAC ABAWPЗ¶☺ABADABACABA

ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACAB APЁИ¶☺ABADABACABAQЁИ¶☺ABADABAC ABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACAB AUPЗ¶☺ABADABACABAVPЗ¶☺ABADABAC ABAWPЗ¶☺ABADABACABAX
PЗ¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACAB APЁИ¶☺ABADABACABAQЁИ¶☺ABADABAC ABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACAB AUPЗ¶☺ABADABACABAVPЗ¶☺ABADABAC ABAWPЗ¶☺ABADABACABAX
PЗ¶☺ABADABACABAYPЗ¶☺ABADABACAB A
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACAB APЁИ¶☺ABADABACABAQЁИ¶☺ABADABAC ABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACAB AUPЗ¶☺ABADABACABAVPЗ¶☺ABADABAC ABAWPЗ¶☺ABADABACABAX
PЗ¶☺ABADABACABAYPЗ¶☺ABADABACAB AZ╨И¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACAB APЁИ¶☺ABADABACABAQЁИ¶☺ABADABAC ABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACAB AUPЗ¶☺ABADABACABAVPЗ¶☺ABADABAC ABAWPЗ¶☺ABADABACABAX
PЗ¶☺ABADABACABAYPЗ¶☺ABADABACAB AZ╨И¶☺ABADABACABA[╨И¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACAB APЁИ¶☺ABADABACABAQЁИ¶☺ABADABAC ABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACAB AUPЗ¶☺ABADABACABAVPЗ¶☺ABADABAC ABAWPЗ¶☺ABADABACABAX
PЗ¶☺ABADABACABAYPЗ¶☺ABADABACAB AZ╨И¶☺ABADABACABA[╨И¶☺ABADABACABA\╨И¶☺ABADABACAB A

ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACAB APЁИ¶☺ABADABACABAQЁИ¶☺ABADABAC ABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACAB AUPЗ¶☺ABADABACABAVPЗ¶☺ABADABAC ABAWPЗ¶☺ABADABACABAX
PЗ¶☺ABADABACABAYPЗ¶☺ABADABACAB AZ╨И¶☺ABADABACABA[╨И¶☺ABADABACABA\╨И¶☺ABADABACAB A]
╨И¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACAB AF►u¶☺ABADABACABAGPЗ¶☺ABADABAC ABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACAB AK8И¶☺ABADABACABAL8И¶☺ABADABAC ABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACAB APЁИ¶☺ABADABACABAQЁИ¶☺ABADABAC ABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACAB AUPЗ¶☺ABADABACABAVPЗ¶☺ABADABAC ABAWPЗ¶☺ABADABACABAX
PЗ¶☺ABADABACABAYPЗ¶☺ABADABACAB AZ╨И¶☺ABADABACABA[╨И¶☺ABADABACABA\╨И¶☺ABADABACAB A]
╨И¶☺ABADABACABA^╨И¶☺ABADABACAB A


Так вот вопрос: что не так?

Делал вариацию цикла res=&g; вместо res.insert(res.length(),&g);, и значения заполнялись с конца в начало, при чем выводилось 15 символов таким образом
Кликните здесь для просмотра всего текста
A
BA
CBA
DCBA
EDCBA
FEDCBA
GFEDCBA
HGFEDCBA
IHGFEDCBA
JIHGFEDCBA
KJIHGFEDCBA
LKJIHGFEDCBA
MLKJIHGFEDCBA
NMLKJIHGFEDCBA
ONMLKJIHGFEDCBA
PИ⌂"☺KJIHGFEDCBA
QИ⌂"☺KJIHGFEDCBA
RИ⌂"☺KJIHGFEDCBA
SИ⌂"☺KJIHGFEDCBA
TИ⌂"☺KJIHGFEDCBA
UИ⌂"☺KJIHGFEDCBA
VИ⌂"☺KJIHGFEDCBA
WИ⌂"☺KJIHGFEDCBA
XИ⌂"☺KJIHGFEDCBA
YИ⌂"☺KJIHGFEDCBA
ZИ⌂"☺KJIHGFEDCBA
[И⌂"☺KJIHGFEDCBA
\И⌂"☺KJIHGFEDCBA
]И⌂"☺KJIHGFEDCBA
^И⌂"☺KJIHGFEDCBA


Добавлено через 23 минуты
При конструировании объекта из тех же 30 символов через массив строка выводилась нормально:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<conio.h>
using namespace std;
 
int main(void)
{
    char a[30];
    for(int i=0;i<29;i++)a[i]=i+65;
    a[29]='\0';
    string str(a);
    for(unsigned int j=0;j<str.length()+1;j++)cout<<str[j];
    cout<<'!'<<endl;
    _getch();
    return 0;
}
Вывод:
Кликните здесь для просмотра всего текста
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] !


Добавлено через 1 час 24 минуты
Тема, подъем!

Добавлено через 54 минуты
Вверх!

Добавлено через 1 час 33 минуты
Вверх!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2013, 00:35
Ответы с готовыми решениями:

Классы. Работа с объектами типа массив
Не нашел подобной темы на форуме, да и вообще в интернете :( Создать объекты для работы с...

Присвоение объекту типа string рандомный элемент из массива типа string
Добрый вечер, дорогие форумчане. Я столкнулся с проблемой. Как присвоить объекту типа string...

работа с массивами типа String
создаем два массива с одинаковыми элементами, но разными по расположению..как сделать, чтобы второй...

Работа с переменными типа string!
Выделить в строке текста, состоящей только из одних цифр и раз-делителей слова (допустимые...

28
5468 / 4863 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.04.2013, 01:07 2
Первая ошибка в 10 строке, должно быть так:
C++
1
string res(n, g);
Добавлено через 15 минут
C++
1
 res.insert(res.length(),&g);
Здесь выход за границу строки (индекс последнего элемента: res.length() - 1)
Дальше тоже выходы за границу. Что код должен делать?
0
276 / 275 / 83
Регистрация: 03.02.2013
Сообщений: 789
06.04.2013, 01:18 3
долго вникал в тему..., но видимо автор хотел что-то типа такого
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
#include<conio.h>
using namespace std;
 
int main(void)
{
    char g='\0';
    int n=30;
    string res(n,g);
    
    for(char i=65;i<65+n;i++) 
    {
 
        res.push_back((char)i);
 
        for(unsigned int j=0;j<res.length()+1;j++)cout<<res[j];
        cout<<endl;
    }
    _getch();
    return 0;
}
или я вообще ничерта не понял )))
1
5468 / 4863 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.04.2013, 01:23 4
Цитата Сообщение от abit Посмотреть сообщение
j<res.length()+1
Это тоже выход за границу.
0
276 / 275 / 83
Регистрация: 03.02.2013
Сообщений: 789
06.04.2013, 01:26 5
Цитата Сообщение от alsav22 Посмотреть сообщение
Это тоже выход за границу.
да, Вы правы, надо вместо "j<res.length()+1"
C++
1
j!=res.length()
тут вряд ли уперкнёте )
0
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
06.04.2013, 01:32  [ТС] 6
Чтобы было понятнее:
изначально хотел, чтобы из строки
qwerty\0
можно было сделать строку
qwertyu\0

\0 - байтовый ноль; подставляется символ u.

Добавлено через 4 минуты
Цитата Сообщение от abit Посмотреть сообщение
долго вникал в тему..., но видимо автор хотел что-то типа такого
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
#include<conio.h>
using namespace std;
 
int main(void)
{
    char g='\0';
    int n=30;
    string res(n,g);
    
    for(char i=65;i<65+n;i++) 
    {
 
        res.push_back((char)i);
 
        for(unsigned int j=0;j<res.length()+1;j++)cout<<res[j];
        cout<<endl;
    }
    _getch();
    return 0;
}
или я вообще ничерта не понял )))
Спасибо за push_back(); Не знал про него. Есть ли подобная функция(не concat) для подстановки строки?
0
5468 / 4863 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.04.2013, 01:34 7
Цитата Сообщение от abit Посмотреть сообщение
тут вряд ли уперкнёте )
Лучше просто:j<res.length(), а то вдруг индекс перепрыгнет равенство. Шутка, в данном коде не перепрыгнет. Можно по разному, кому как привычнее.

Добавлено через 2 минуты
Цитата Сообщение от TempuSFatumA Посмотреть сообщение
Чтобы было понятнее:
изначально хотел, чтобы из строки
qwerty\0
можно было сделать строку
qwertyu\0
\0 - байтовый ноль; подставляется символ u.
Зачем вам тут '\0'? Для объектов string он не нужен, это для строк в стиле С.
0
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
06.04.2013, 01:39  [ТС] 8
Цитата Сообщение от alsav22 Посмотреть сообщение
Первая ошибка в 10 строке, должно быть так:
C++
1
string res(n, g);
Добавлено через 15 минут
C++
1
 res.insert(res.length(),&g);
Здесь выход за границу строки (индекс последнего элемента: res.length() - 1)
Дальше тоже выходы за границу. Что код должен делать?
А
C++
1
string res(n, g);
железобетонно?

Добавлено через 4 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
Лучше просто:j<res.length(), а то вдруг индекс перепрыгнет равенство. Шутка, в данном коде не перепрыгнет. Можно по разному, кому как привычнее.

Добавлено через 2 минуты

Зачем вам тут '\0'? Для объектов string он не нужен, это для строк в стиле С.
Когда брал длину строки ф-ей length() и потом по ней делал for(i=0;i<len;i++), то да, не имело смысла \0 ставить.

Но мне для личного, так сказать, пользования надо было именно с нулевым байтом(удобнее).
0
5468 / 4863 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.04.2013, 01:39 9
Что-то добавить в string можно разными методами: append(), insert(), push_back().
1
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
06.04.2013, 01:40  [ТС] 10
Цитата Сообщение от alsav22 Посмотреть сообщение
Лучше просто:j<res.length(), а то вдруг индекс перепрыгнет равенство. Шутка, в данном коде не перепрыгнет. Можно по разному, кому как привычнее.

Добавлено через 2 минуты

Зачем вам тут '\0'? Для объектов string он не нужен, это для строк в стиле С.
Но буду теперь это иметь в виду. Спасибо.
0
5468 / 4863 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.04.2013, 01:50 11
Цитата Сообщение от TempuSFatumA Посмотреть сообщение
Но мне для личного, так сказать, пользования надо было именно с нулевым байтом(удобнее).
Ещё раз повторю, что '\0' нужен для строк С. Для объектов string он не нужен. Какое удобство он вам давал?

Добавлено через 1 минуту
И, если работаете с объектами string, не забывайте делать:
C++
1
#include <string>
Добавлено через 7 минут
Символ '\0' в конце строки С для чего, вообщем-то, нужен? Например, вывод будет до '\0' или длина строки, через length() определяется до '\0'. Объект же string сам знает свою длину (хранится в нём), что используется при выводе и в других случаях. Ему '\0' без надобности.
0
276 / 275 / 83
Регистрация: 03.02.2013
Сообщений: 789
06.04.2013, 01:50 12
Цитата Сообщение от alsav22 Посмотреть сообщение
Лучше просто:j<res.length(), а то вдруг индекс перепрыгнет равенство. Шутка, в данном коде не перепрыгнет. Можно по разному, кому как привычнее.
Всё же дело не в привычке, есть такое понятие - инвариант цикла, и если Вы хотите писать безошибочно и быстро любые циклы этим понятием надо владеть, любая привычка - это дело замедляет... потому что приходится думать... если вы делаете по теории - ошибок быть не должно

в данном случае требования инварианта цилка просят ставить !=, чтобы не задумываться


TempuSFatumA
Спасибо за push_back(); Не знал про него. Есть ли подобная функция(не concat) для подстановки строки?
push_back(var) - основа любого последовательного контейнера в STL и чем вам не устраивает конкатенация? для std::string она очень хорошо сделана
1
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
06.04.2013, 01:54  [ТС] 13
Кстати говоря, будет ли нормально работать код

string abc(string s){return s;}

C++
1
2
3
4
5
6
***
string h="!!!";
 
h=abc(h);
 
***
h не должно никак менять своё значение, так?

Добавлено через 1 минуту
Цитата Сообщение от abit Посмотреть сообщение
Всё же дело не в привычке, есть такое понятие - инвариант цикла, и если Вы хотите писать безошибочно и быстро любые циклы этим понятием надо владеть, любая привычка - это дело замедляет... потому что приходится думать... если вы делаете по теории - ошибок быть не должно

в данном случае требования инварианта цилка просят ставить !=, чтобы не задумываться


TempuSFatumA


push_back(var) - основа любого последовательного контейнера в STL и чем вам не устраивает конкатенация? для std::string она очень хорошо сделана
Её компилятор не распознает просто, библиотеки какой-то не хватает.
0
5468 / 4863 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.04.2013, 01:57 14
Цитата Сообщение от abit Посмотреть сообщение
любая привычка - это дело замедляет... потому что приходится думать...
С точностью до наоборот.
Цитата Сообщение от abit Посмотреть сообщение
в данном случае требования инварианта цилка просят ставить !=, чтобы не задумываться
Ничего они и никого не просят. Здесь условие выхода из цикла. Как это условие оформить, дело того, кто код пишет. Главное, чтобы ошибок не было.
0
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
06.04.2013, 01:59  [ТС] 15
Цитата Сообщение от alsav22 Посмотреть сообщение
Ещё раз повторю, что '\0' нужен для строк С. Для объектов string он не нужен. Какое удобство он вам давал?

Добавлено через 1 минуту
И, если работаете с объектами string, не забывайте делать:
C++
1
#include <string>
Добавлено через 7 минут
Символ '\0' в конце строки С для чего, вообщем-то, нужен? Например, вывод будет до '\0' или длина строки, через length() определяется до '\0'. Объект же string сам знает свою длину (хранится в нём), что используется при выводе и в других случаях. Ему '\0' без надобности.
Я просто нашаманил код, где нужен \0 в чар массивах, как раз-таки для определения их длин. Возможно переделаю позже всё под string и без нолика.
0
276 / 275 / 83
Регистрация: 03.02.2013
Сообщений: 789
06.04.2013, 02:04 16
Цитата Сообщение от alsav22 Посмотреть сообщение
С точностью до наоборот.

Ничего они и никого не просят. Здесь условие выхода из цикла. Как это условие оформить, дело того, кто код пишет. Главное, чтобы ошибок не было.
Это вы так думаете... видимо не читали больших проектов... или не писали
когда вопрос стоит о границах массивов в цикле (кстати в С++ этой проблемы нет) - нужно сводить массив к множеству [0,x) для просты написания и понимания, а об инвариантах цикла - чётко нужно знать с смого начала условие выхода из цикла и чем чётче оно определено, тем лучше, почитайте Пратта, Кёнинга, Страуструпа или Шилдта... да, требования в стантарте нет, но безусловно все большие проекты, что я видел придерживаются правила определять инвариант столь же чётко
0
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
06.04.2013, 02:05  [ТС] 17
Из сообщения с последним кодом исправил теги. Там

C++
1
2
3
4
5
6
7
8
9
10
***
 
string abc(string s){return s;}
 
***
string h="!!!";
 
h=abc(h);
 
***
0
5468 / 4863 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.04.2013, 02:10 18
Цитата Сообщение от abit Посмотреть сообщение
Это вы так думаете...
Не только... Почитайте тех же
Цитата Сообщение от abit Посмотреть сообщение
Пратта, Кёнинга, Страуструпа или Шилдта...
Посмотрите какое условие чаще всего используется в циклaх for() при работе с массивами.

Цитата Сообщение от abit Посмотреть сообщение
видимо не читали больших проектов... или не писали
Это намёк на то, что вы этим занимались? Как же тогда понимать предложенный вами в 3 посте код, с выходом за границу строки? Это, наверное, от большого опыта?
0
276 / 275 / 83
Регистрация: 03.02.2013
Сообщений: 789
06.04.2013, 02:24 19
Цитата Сообщение от alsav22 Посмотреть сообщение
Не только... Почитайте тех же
Посмотрите какое условие чаще всего используется в циклaх for() при работе с массивами.


Это намёк на то, что вы этим занимались? Как же тогда понимать предложенный вами в 3 посте код, с выходом за границу строки? Это, наверное, от большого опыта?
да это я просто скопировал код, который был, не сильно вдумываясь что там, знаете есть такая философия - позитивизм, вот я из таких людей - по мне работает, и фиг с ним) я не вчитываюсь в то, что написали другие, пока это работает и меня устраивает

вот я специально открыл Кёнига, перелистал, ни разу не встретил > в циклах, он пишет очень аккуратно, ему не лень писать конструкции типа
C++
1
for (std::vector<Student_info>::const_iterator it = students.begin(); it != students.end(); ++it)
это отличный стиль...
покажите где у него инвариант сравнивается на "больше"? думаю нет такого места
0
5468 / 4863 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.04.2013, 02:33 20
Цитата Сообщение от abit Посмотреть сообщение
ни разу не встретил > в циклах
Цитата Сообщение от abit Посмотреть сообщение
покажите где у него инвариант сравнивается на "больше"?
А где я предлагаю "больше"?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2013, 02:33

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

C# работа в масивами типа string
здравствуйте у меня вопрос предположим у меня есть 5 textBox в которые вводят разные слова или...

Обработка символьных строк (данных типа String).Работа над ошибками
Не помогли бы вы мне с моими ошибками в таком задании: Дано строку символов, который состоит из...

Оператор & невозможно применить к операнду типа string и string
Хельп 4 и 24 строка public static void zad1(int b, int b1, int max, byte n, byte m,...

Запись значения типа String^ в char* или std::string
String^ D1=textBox1-&gt;Text; Int32 D2=Convert::ToInt32(textBox2-&gt;Text); //god Int32...


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

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

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