С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

помогите с указателями - C++
Помогите переделать через указатель int *x. #include<iostream.h> #include<string.h> #include<conio.h> main() { clrscr();...

работа с указателями - C++
#include <iostream> using namespace std; int main() { char *res=""; res="1"; res="2"; ...

Непонятки с указателями - C++
#include <iostream> using namespace std; int is_order(const int* array) { for(const int* z = array; z < array +...

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

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

21
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
11.01.2009, 17:00 #16
твой файл я исправил (и имя и объявление strlen и scanf читает теперь правильно, и по теме у тебя мало того что там ошибка, мало того что ты не понимаешь в чём там ошибка, так даже если её исправить всё неправильно работает)

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

допустим длина строки равна 5, 1-5 = -4, это 1111100 (еденицы налево идут до края типа), получится количество символов чётное, ты понял или нет ?
0
Вложения
Тип файла: txt main.txt (256 байт, 14 просмотров)
Ensase
Флудер
191 / 29 / 5
Регистрация: 23.03.2007
Сообщений: 334
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, что неправильно
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
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);
0
Ensase
Флудер
191 / 29 / 5
Регистрация: 23.03.2007
Сообщений: 334
12.01.2009, 04:43 #19
Еще после твоего второго сообщения я понял в чем была ошибка. обычно я не задумываюсь про приоритеты, а обильно пичкаю скобками

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

main()
{
    if (2 & 2 > 1)
        printf("yes\n");
    return 0;
}
вот показательный, не выведет ничего
0
Mort
0 / 0 / 0
Регистрация: 10.01.2009
Сообщений: 4
12.01.2009, 15:58  [ТС] #21
Всё, спасибо большое) после небольшой доработки напильником сдал наконец эту задачу=)
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
13.01.2009, 02:31 #22
Код
    p += strlen(p)/2 - (strlen(p) > 0) + strlen(p)%2;
еденицу можно убрать таким образом
0
13.01.2009, 02:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2009, 02:31
Привет! Вот еще темы с ответами:

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

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

Работа с указателями - C++
Расскажите как работает каждая строка в коде char *A = &quot;123456789&quot;; unsigned B = 1; char *X = A + B; char *Y = A - (-...

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


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

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

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