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

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

06.04.2013, 00:35. Показов 2811. Ответов 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И⌂¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABA

ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABA

ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACABAPЁИ¶☺ABAD ABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACABAPЁИ¶☺ABAD ABACABAQЁИ¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACABAPЁИ¶☺ABAD ABACABAQЁИ¶☺ABADABACABARPЗ¶☺ABADABACABA

ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACABAPЁИ¶☺ABAD ABACABAQЁИ¶☺ABADABACABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACABAPЁИ¶☺ABAD ABACABAQЁИ¶☺ABADABACABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACABAPЁИ¶☺ABAD ABACABAQЁИ¶☺ABADABACABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACABAUPЗ¶☺ABAD ABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACABAPЁИ¶☺ABAD ABACABAQЁИ¶☺ABADABACABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACABAUPЗ¶☺ABAD ABACABAVPЗ¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACABAPЁИ¶☺ABAD ABACABAQЁИ¶☺ABADABACABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACABAUPЗ¶☺ABAD ABACABAVPЗ¶☺ABADABACABAWPЗ¶☺ABADABACABA

ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACABAPЁИ¶☺ABAD ABACABAQЁИ¶☺ABADABACABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACABAUPЗ¶☺ABAD ABACABAVPЗ¶☺ABADABACABAWPЗ¶☺ABADABACABAX
PЗ¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACABAPЁИ¶☺ABAD ABACABAQЁИ¶☺ABADABACABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACABAUPЗ¶☺ABAD ABACABAVPЗ¶☺ABADABACABAWPЗ¶☺ABADABACABAX
PЗ¶☺ABADABACABAYPЗ¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACABAPЁИ¶☺ABAD ABACABAQЁИ¶☺ABADABACABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACABAUPЗ¶☺ABAD ABACABAVPЗ¶☺ABADABACABAWPЗ¶☺ABADABACABAX
PЗ¶☺ABADABACABAYPЗ¶☺ABADABACABAZ╨И¶☺ABAD ABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACABAPЁИ¶☺ABAD ABACABAQЁИ¶☺ABADABACABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACABAUPЗ¶☺ABAD ABACABAVPЗ¶☺ABADABACABAWPЗ¶☺ABADABACABAX
PЗ¶☺ABADABACABAYPЗ¶☺ABADABACABAZ╨И¶☺ABAD ABACABA[╨И¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACABAPЁИ¶☺ABAD ABACABAQЁИ¶☺ABADABACABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACABAUPЗ¶☺ABAD ABACABAVPЗ¶☺ABADABACABAWPЗ¶☺ABADABACABAX
PЗ¶☺ABADABACABAYPЗ¶☺ABADABACABAZ╨И¶☺ABAD ABACABA[╨И¶☺ABADABACABA\╨И¶☺ABADABACABA

ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACABAPЁИ¶☺ABAD ABACABAQЁИ¶☺ABADABACABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACABAUPЗ¶☺ABAD ABACABAVPЗ¶☺ABADABACABAWPЗ¶☺ABADABACABAX
PЗ¶☺ABADABACABAYPЗ¶☺ABADABACABAZ╨И¶☺ABAD ABACABA[╨И¶☺ABADABACABA\╨И¶☺ABADABACABA]
╨И¶☺ABADABACABA
ABACABADABACABAEИ⌂¶☺ABADABACABAF►u¶☺ABAD ABACABAGPЗ¶☺ABADABACABAH░З¶☺ABADABACABAI
░З¶☺ABADABACABAJ8И¶☺ABADABACABAK8И¶☺ABAD ABACABAL8И¶☺ABADABACABAMЁИ¶☺ABADABACABAN
ЁИ¶☺ABADABACABAOЁИ¶☺ABADABACABAPЁИ¶☺ABAD ABACABAQЁИ¶☺ABADABACABARPЗ¶☺ABADABACABAS
PЗ¶☺ABADABACABATPЗ¶☺ABADABACABAUPЗ¶☺ABAD ABACABAVPЗ¶☺ABADABACABAWPЗ¶☺ABADABACABAX
PЗ¶☺ABADABACABAYPЗ¶☺ABADABACABAZ╨И¶☺ABAD ABACABA[╨И¶☺ABADABACABA\╨И¶☺ABADABACABA]
╨И¶☺ABADABACABA^╨И¶☺ABADABACABA


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

Делал вариацию цикла 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.04.2013, 00:35
Ответы с готовыми решениями:

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

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

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

28
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.04.2013, 01:07
Первая ошибка в 10 строке, должно быть так:
C++
1
string res(n, g);
Добавлено через 15 минут
C++
1
 res.insert(res.length(),&g);
Здесь выход за границу строки (индекс последнего элемента: res.length() - 1)
Дальше тоже выходы за границу. Что код должен делать?
0
 Аватар для abit
868 / 527 / 148
Регистрация: 03.02.2013
Сообщений: 1,845
06.04.2013, 01:18
долго вникал в тему..., но видимо автор хотел что-то типа такого
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
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.04.2013, 01:23
Цитата Сообщение от abit Посмотреть сообщение
j<res.length()+1
Это тоже выход за границу.
0
 Аватар для abit
868 / 527 / 148
Регистрация: 03.02.2013
Сообщений: 1,845
06.04.2013, 01:26
Цитата Сообщение от alsav22 Посмотреть сообщение
Это тоже выход за границу.
да, Вы правы, надо вместо "j<res.length()+1"
C++
1
j!=res.length()
тут вряд ли уперкнёте )
0
 Аватар для TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
06.04.2013, 01:32  [ТС]
Чтобы было понятнее:
изначально хотел, чтобы из строки
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
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.04.2013, 01:34
Цитата Сообщение от abit Посмотреть сообщение
тут вряд ли уперкнёте )
Лучше просто:j<res.length(), а то вдруг индекс перепрыгнет равенство. Шутка, в данном коде не перепрыгнет. Можно по разному, кому как привычнее.

Добавлено через 2 минуты
Цитата Сообщение от TempuSFatumA Посмотреть сообщение
Чтобы было понятнее:
изначально хотел, чтобы из строки
qwerty\0
можно было сделать строку
qwertyu\0
\0 - байтовый ноль; подставляется символ u.
Зачем вам тут '\0'? Для объектов string он не нужен, это для строк в стиле С.
0
 Аватар для TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
06.04.2013, 01:39  [ТС]
Цитата Сообщение от 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
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.04.2013, 01:39
Что-то добавить в string можно разными методами: append(), insert(), push_back().
1
 Аватар для TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
06.04.2013, 01:40  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Лучше просто:j<res.length(), а то вдруг индекс перепрыгнет равенство. Шутка, в данном коде не перепрыгнет. Можно по разному, кому как привычнее.

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

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

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

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


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

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
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.04.2013, 01:57
Цитата Сообщение от abit Посмотреть сообщение
любая привычка - это дело замедляет... потому что приходится думать...
С точностью до наоборот.
Цитата Сообщение от abit Посмотреть сообщение
в данном случае требования инварианта цилка просят ставить !=, чтобы не задумываться
Ничего они и никого не просят. Здесь условие выхода из цикла. Как это условие оформить, дело того, кто код пишет. Главное, чтобы ошибок не было.
0
 Аватар для TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
06.04.2013, 01:59  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Ещё раз повторю, что '\0' нужен для строк С. Для объектов string он не нужен. Какое удобство он вам давал?

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

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

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

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


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

вот я специально открыл Кёнига, перелистал, ни разу не встретил > в циклах, он пишет очень аккуратно, ему не лень писать конструкции типа
C++
1
for (std::vector<Student_info>::const_iterator it = students.begin(); it != students.end(); ++it)
это отличный стиль...
покажите где у него инвариант сравнивается на "больше"? думаю нет такого места
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.04.2013, 02:33
Цитата Сообщение от abit Посмотреть сообщение
ни разу не встретил > в циклах
Цитата Сообщение от abit Посмотреть сообщение
покажите где у него инвариант сравнивается на "больше"?
А где я предлагаю "больше"?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.04.2013, 02:33
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru