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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
Mort
0 / 0 / 0
Регистрация: 10.01.2009
Сообщений: 4
#1

Задача с указателями - C++

10.01.2009, 23:15. Просмотров 1766. Ответов 21
Метки нет (Все метки)

Здравствуйте. У меня проблема: никак не могу понять эти указатели. Есть задача: пользователь вводит слово. затем, если число букв чётное - удаляем 2 центральных символа; если не чётное - то, соответственно, 1 центральный символ. Затем просто выводим результат. Если брать слово как буквенный массив, то проблемы никакой (просто двигаем индекс букв). НО нужно двигать именно указатель. Помогите пожалуйста, а то сам никак не могу =(
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2009, 23:15     Задача с указателями
Посмотрите здесь:

задача с Указателями - C++
помогите!!как этот код написать с указателями?? #include "stdafx.h" #include "conio.h" #include "locale.h" #include...

работа с указателями - C++
Помогите решить задачу в С++ (я в этом начиющий): 1)Из положительных значений двух целочисленных массивов различной размерности...

Работа с указателями - C++
Написать программу, в которой выполнить следующие действия: 1) Описать указатели на все известные типы данных; 2. Выполнить для каждого...

Прикол с указателями - C++
взял пример с http://www.cplusplus.com/reference/algorithm/find/, немного поэксперементировал и наткнулся на необъяснимый факт) Смотрим: ...

Работа с указателями - C++
#include <iostream> #include <conio.h> using namespace std; void fun(int *p) { int *temp=new int; *temp=15; delete p; ...

Работа с указателями - C++
#include <iostream> #include <cstdio> #include <iomanip> using namespace std; int main() { int i;float f;long int l;double d;...

Ошибка с указателями - C++
Рад снова всех приветствовать. У меня появилась небольшая проблема. Изучаю C++ по книге Р. Лафоре "ООП в C++". Так вот, в принципе, книга...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.01.2009, 17:00     Задача с указателями #16
твой файл я исправил (и имя и объявление strlen и scanf читает теперь правильно, и по теме у тебя мало того что там ошибка, мало того что ты не понимаешь в чём там ошибка, так даже если её исправить всё неправильно работает)

ты вообще внимательно прочитал что я тебе написал по поводу скобок ? если от еденицы отнимается длина строки, а потом полученное отрицательное число побитово умножается на еденицу, получится младший бит отрицательного числа, если у тебя там что-то правильно - это просто совпадение и не более

допустим длина строки равна 5, 1-5 = -4, это 1111100 (еденицы налево идут до края типа), получится количество символов чётное, ты понял или нет ?
Вложения
Тип файла: txt main.txt (256 байт, 14 просмотров)
Ensase
Флудер
191 / 29 / 5
Регистрация: 23.03.2007
Сообщений: 335
11.01.2009, 22:23     Задача с указателями #17
это называется переливание из пустого в порожнее или по-другому занудство.
все выше сказанное можно было уложить в одно сообщение
при этом никакого отношения к теме вся эта чепуха не имеет

Добавлено через 4 часа 38 минут 45 секунд
и не важно что получается отрицательное число (это еще как посмотреть), так как после 1-strlen(c) следует &1 все биты кроме 0го не важны
и это будет эквивалентно
x%2 ? 1 : 0, что правильно
а вот
1+(strlen(c)&1)
будет давать 2 при strlen = 1, что неправильно
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.01.2009, 02:57     Задача с указателями #18
это называется переливание из пустого в порожнее или по-другому занудство
это называется ты код неправильно написал

и не важно что получается отрицательное число
важно, потому что отрицательное число получается чётным когда строка содержит 5 символов и нечётным когда строка содержит 4 символа, на краю оказывается соответствующий бит

задание
abc - вырезать b
abcd - вырезать bc

p, который установлен на a в обоих случаях при добавлении половины в первом случае оказывается на b, а во втором случае оказывается на c; в обоих случаях мы шагаем влево (в первом перейдёт на a во втором перейдёт на b), а потом шагаем вправо на значение этого бита чётности (в первом случае он равен еденице, во втором случае он равен нулю), т.е. в первом случае он шагает влево и вправо, а во втором случае только влево (таким образом получается правильная установка для обоих случаев на b)

твой код я запускал, на тебе ещё пример

Код
 
#include <stdio.h>

main()
{
    int a = 1;
    
    if (a << 1 == 2)
        printf("yes a = %d\n", a);
    return 0;
}
как ты думаешь она выведет 2 ?

Добавлено через 2 часа 36 минут 27 секунд
я понял, они обе правильные только работают по разному и ошибка у них наступает при нуле (указатель с начала строки смещается влево)
Код
    p += (strlen(c) >> 1) - 1 + (strlen(c) & 1);
    p += (strlen(c) >> 1) - (1 - strlen(c) & 1);
Ensase
Флудер
191 / 29 / 5
Регистрация: 23.03.2007
Сообщений: 335
12.01.2009, 04:43     Задача с указателями #19
Еще после твоего второго сообщения я понял в чем была ошибка. обычно я не задумываюсь про приоритеты, а обильно пичкаю скобками

зы: этот пример - сравнение выполняется раньше сдвига
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.01.2009, 08:31     Задача с указателями #20
Код
 
#include <stdio.h>

main()
{
    if (2 & 2 > 1)
        printf("yes\n");
    return 0;
}
вот показательный, не выведет ничего
Mort
0 / 0 / 0
Регистрация: 10.01.2009
Сообщений: 4
12.01.2009, 15:58  [ТС]     Задача с указателями #21
Всё, спасибо большое) после небольшой доработки напильником сдал наконец эту задачу=)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2009, 02:31     Задача с указателями
Еще ссылки по теме:

Проблема с указателями! - C++
Создать программу для решения задачи построения слова из некоторого множества букв (игра Scrabble) используя алгоритмы поиска в глубину и в...

Операции с указателями в С++ - C++
Используя приведенный ниже код разработать программу, используя в качестве контейнера для хранения данных динамические массивы. Для...

Вектор с указателями - C++
Доброго времени суток, есть такой код: // 1159.cpp : Defines the entry point for the console application. // #include...

путаница с указателями - C++
Люди, помогите, пожалуйста! Имеется двумерный динамический массив, объявленный и проинициализированный следующим образом: int i, j, n =...

Ошибка с указателями - C++
Похоже у меня проблема с указателями, но что то я жутко торможу и не соображу как правильно сделать. Как минимум в 44 строке ошибка. ...


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

Или воспользуйтесь поиском по форуму:
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.01.2009, 02:31     Задача с указателями #22
Код
    p += strlen(p)/2 - (strlen(p) > 0) + strlen(p)%2;
еденицу можно убрать таким образом
Yandex
Объявления
13.01.2009, 02:31     Задача с указателями
Ответ Создать тему
Опции темы

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