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

как понять код? - C++

Восстановить пароль Регистрация
 
KattyAlex
 Аватар для KattyAlex
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 26
24.02.2013, 02:03     как понять код? #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <string.h>
int main()
{
    char str[10] = "abcdef";
    int slen = strlen(str);
    for(int i=0;i<slen/2;i++)
    {
        str[i] = str[i] + str[slen-i-1];
        str[slen-i-1] = str[i] - str[slen-i-1];
        str[i] = str[i] - str[slen-i-1];
    }
    return 0;
}
расшифруйте, пожалуйста, запись в 11-ой строке.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
24.02.2013, 02:09     как понять код? #2
Переменной slen присваиваем длину строки str.
palva
 Аватар для palva
2373 / 1595 / 190
Регистрация: 08.06.2007
Сообщений: 6,364
Записей в блоге: 4
24.02.2013, 02:10     как понять код? #3
Цитата Сообщение от KattyAlex Посмотреть сообщение
int slen = strlen(str);
объявить целую переменную slen и записать в нее длину строки str.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
24.02.2013, 02:10     как понять код? #4
hide
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.02.2013, 02:11     как понять код? #5
Переменной типа slen присваивается значение, равное количеству символов(видимых) в строке str.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
24.02.2013, 02:12     как понять код? #6
Переменной slen присваивается значение длины массива символов str. В данном случае длина str = 6 (не считая \0).
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
24.02.2013, 04:41     как понять код? #7
перестановка символов в строке в обратном порядке.
строки 8-10 обмен местами двух символов симметрично, относительно середины строки.
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
24.02.2013, 11:23     как понять код? #8
Цитата Сообщение от KattyAlex Посмотреть сообщение
расшифруйте, пожалуйста, запись в 11-ой строке.
C++
1
}
ну, это закрывающая фигурная скобка цикла for.
Catstail
Модератор
 Аватар для Catstail
21486 / 10239 / 1668
Регистрация: 12.02.2012
Сообщений: 17,120
24.02.2013, 11:34     как понять код? #9
Это плохая реализация инвертирования строки (т.е. перестановки ее символов в обратном порядке). Плохая, потому, что сложение байтов может вызвать переполнение...
KattyAlex
 Аватар для KattyAlex
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 26
24.02.2013, 22:02  [ТС]     как понять код? #10
а Вы могли бы написать мне хорошую реализацию?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
24.02.2013, 22:10     как понять код? #11
и такая покатит.
booker
 Аватар для booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
24.02.2013, 23:20     как понять код? #12
эта лучше

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <string.h>
 
int main()
{
    char str[10] = "abcdefg";
    char temp;
    int slen = strlen(str);
    for(int i=0;i<slen/2;i++)
    {
        temp=*(str+i);
    *(str+i) = *(str + (slen-i-1));
        *(str + (slen-i-1)) = temp;
        
    }
    return 0;
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
24.02.2013, 23:22     как понять код? #13
Цитата Сообщение от booker Посмотреть сообщение
эта лучше
Это ещё чем, интересно? оператор [] ведь абсолютно эквивалентен твоим этим
Цитата Сообщение от booker Посмотреть сообщение
*(str+i);
booker
 Аватар для booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
25.02.2013, 00:10     как понять код? #14
понятнее
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
25.02.2013, 00:15     как понять код? #15
Цитата Сообщение от booker Посмотреть сообщение
понятнее
По-твоему, это
C++
1
*(str+i) = *(str + slen-i-1);
более понятно, чем это?
C++
1
str[i] = str[slen-i-1];
booker
 Аватар для booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
25.02.2013, 00:21     как понять код? #16
для меня без разницы

понятнее с временной переменной, т.к. сложение вычитание с char - индокод. имхо.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
25.02.2013, 00:28     как понять код? #17
Если нужно всё-таки на С++
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <string>
 
int main() {
    std::string s;
    
    while ( std::cout << "String:   " && std::getline(std::cin, s) && ! s.empty() )
        std::cout << "Reversed: " << std::string(s.rbegin(), s.rend()) << std::endl;
    
    return 0;
}
booker
 Аватар для booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
25.02.2013, 00:36     как понять код? #18
ишо

C++
1
2
3
4
5
6
7
8
9
10
11
#include <string>
#include<iostream>
#include<algorithm>
int main()
{
   std::string str ="qwerty";
   std::reverse(str.begin(),str.end());
   std::cout<<str;
   system("pause");
   return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2013, 01:00     как понять код?
Еще ссылки по теме:

C++ Код программы на языке С++. Не могу понять в чем ошибка
C++ Не понять как работает код
Помогите понять код по теме алгоритма Дифии-Хелмана C++

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

Или воспользуйтесь поиском по форуму:
Simyrg
 Аватар для Simyrg
3 / 3 / 0
Регистрация: 22.04.2012
Сообщений: 13
25.02.2013, 01:00     как понять код? #19
Как вариант использовать промежуточный буфер, не так уж это и затратно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
 
    char buff;                  //буфер для символа
    char str[10] = "abcdefgh";  //строка
    int slen = strlen(str);     //размер строки
   
    for(int i=0; i<slen/2; i++) {
        buff=str[i];
        str[i]=str[slen-i-1];
        str[slen-i-1]=buff;
    }
 
    return 0;
}
Хотя по мне лучше использовать string, не зря его умные дяди придумали :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <string>
 
int main()
{
 
    char buff; //буфер для символа
    std::string str = "abcdefg"; //строка 
    std::string::size_type size=str.size(); //размер строки
    
    for (std::string::size_type i=0; i!=size/2; i++) {
        buff=str[i];
        str[i]=str[size-1-i];
        str[size-1-i]=buff;
    }
 
    return 0;
}
А ещё можно воспользоваться стандартной библиотекой:

C++
1
2
3
4
5
6
7
8
9
10
11
#include <string>
#include <algorithm>    //не забываем для этого подключить algorithm
 
int main()
{
    std::string str = "abcdefg"; //строка 
    
    std::reverse(str.begin(), str.end());   
 
    return 0;
}
http://www.cplusplus.com/reference/algorithm/swap/
http://www.cplusplus.com/reference/algorithm/reverse/

Пардон, пока я это писал уже успели наотвечать
Yandex
Объявления
25.02.2013, 01:00     как понять код?
Ответ Создать тему
Опции темы

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