КАРТА САЙТА
Sibnet.ru
Sibnet.ru

Sibnet.ru — это информационно-развлекательный интернет-проект, ориентированный на широкий круг Сибирского региона.
По данным Rambler Top100, Sibnet.ru является самым популярным порталом в Сибири.

Контакты:
АО "Ринет"
ОГРН 1025402475856
г. Новосибирск, ул. Якушева, д. 37, 3 этаж
отдел рекламы:
(383) 347-10-50, 347-06-78, 347-22-11, 347-03-97

Редакция: (383) 347-86-84

Техподдержка:
help.sibnet.ru
Авторизируйтесь,
чтобы продолжить
Некоторые функции доступны только зарегистрированным пользователям
Неправильный логин или пароль

Внимание! Теперь для входа на форум необходимо вводить единый пароль регистрации сервисов sibnet.ru!

Здравствуйте, гость ( Вход | Регистрация )



 
Ответить в эту темуОткрыть новую тему
> Указатели, MS Visual Studio C++
HELKERN
сообщение 26.2.2010, 23:40
Сообщение #1


Ближе бандерлоги. Ближе.
Group Icon


Группа: Sibnet-club
Сообщений: 3 460
Регистрация: 22.2.2008
Из: Улан-Удэ
Пользователь №: 21 789



Репутация:   745  


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

С индексами я легко сделал) А вот с указателями в ступоре

Код
#include "stdafx.h"
#include <conio.h>
#include "string.h"

char A[15]="aieoquyAIEOQUY";
char B[10];
char C[10];
char *a,*b,*c;
void main ()
{
    printf(" Vvedite stroky ne bolshe 10 simvolov\n");
    gets(B);
    a=A;
    b=B;
    c=C;
    while(a!=a+13)
    {
        if(*b==*a)
        {
            c=b;
            a=A;
            b=b+1;
        }
        else a=a+1;
    }
    puts(C);
    getch();
}


Прошу помощи
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
mephisto
сообщение 27.2.2010, 0:12
Сообщение #2


ортодоксальный линуксоид
Group Icon


Группа: VIP
Сообщений: 7 724
Регистрация: 17.11.2007
Из: столицы вашей родины
Пользователь №: 10 849



Ну кто так пишет? Кто вам сказал, что main ничего не должна возвращать?

while(a!=a+13) - это что??? может всё же while(a!='\0') ?
дальше вообще полный...

Давайте то, что работает с индексами, объясню как переделать на указатели
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
HELKERN
сообщение 27.2.2010, 0:17
Сообщение #3


Ближе бандерлоги. Ближе.
Group Icon


Группа: Sibnet-club
Сообщений: 3 460
Регистрация: 22.2.2008
Из: Улан-Удэ
Пользователь №: 21 789



Репутация:   745  


Цитата(mephisto @ 27.2.2010, 1:12) *

Ну кто так пишет? Кто вам сказал, что main ничего не должна возвращать?

while(a!=a+13) - это что??? может всё же while(a!='\0') ?
дальше вообще полный...

Давайте то, что работает с индексами, объясню как переделать на указатели

А смысл возвращать что то в main? Мы эту функцию нигде не вызываем, так и смысла нету что либо возвращать)
а+13 это адрес последней букавки в массиве

Цитата(mephisto @ 27.2.2010, 1:12) *

может всё же while(a!='\0') ?

А разве адрес может равняться знаку \0 ?


Код
#include "stdafx.h"
#include <conio.h>
#include "string.h"


int i,j,a=0;
char A[15]="aieoquyAIEOQUY";
char B[10];
char C[10];
void main ()
{
    printf(" Vvedite stroky ne bolshe 10 simvolov\n");
    gets(B);
    for(i=0;i<strlen(B);i++)
    {
        for(j=0;j<strlen(A);j++)
        {
            if(B[i]==A[j])
            {
                C[a]=B[i];
                a++;
            }
        }
    }
    puts(C);
    getch();
}


Сообщение отредактировал HELKERN - 27.2.2010, 0:19
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
mephisto
сообщение 27.2.2010, 9:42
Сообщение #4


ортодоксальный линуксоид
Group Icon


Группа: VIP
Сообщений: 7 724
Регистрация: 17.11.2007
Из: столицы вашей родины
Пользователь №: 10 849



Цитата(HELKERN @ 26.2.2010, 23:17) *

А смысл возвращать что то в main? Мы эту функцию нигде не вызываем, так и смысла нету что либо возвращать)
а+13 это адрес последней букавки в массиве
А разве адрес может равняться знаку \0 ?

Не такой год я править не буду, из него конфетку уже не сделаешь wink.gif Держи пример, разбирайся.
Код

anton@bc /tmp $ cat 1.c
#include <stdio.h>

int main() {
char A[] = "Hellow world!\0";
int i;
for (i = 0; *(A + i) != '\0'; i++)
   printf ("%c", *(A+i));
printf ("\n");
return 0;
}
anton@bc /tmp $ gcc -Wall 1.c && ./a.out
Hellow world!
anton@bc /tmp $




» Спасибо сказали: «
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
HELKERN
сообщение 27.2.2010, 10:05
Сообщение #5


Ближе бандерлоги. Ближе.
Group Icon


Группа: Sibnet-club
Сообщений: 3 460
Регистрация: 22.2.2008
Из: Улан-Удэ
Пользователь №: 21 789



Репутация:   745  


Цитата(lunserv @ 27.2.2010, 3:06) *

это нужно для аварийного завершения программы - если например тебе надо считать данные из файла, а файл не доступен, соответсвенно программа не может продолжить работу и в main() пишем
return 1;


Ну у меня же не происходит чтения с файла, значит мне и возвращать ненадо.
Цитата(lunserv @ 27.2.2010, 3:06) *

попробуй так:
*a == '\0';

Вот это другой разговор) А то mephisto предложил адрес сравнивать с символами \0
Цитата(lunserv @ 27.2.2010, 3:06) *

смещение по указателю происходит так
a++;
доступ к значению
*a;

Тоесть если у меня например указатель a ссылается на 1ый элемента массива и что бы записать туда какое нибудь число мне надо через оператор *
Например *a=*b где b указатель на число в другом массиве




Цитата(mephisto @ 27.2.2010, 10:42) *

Не такой год я править не буду, из него конфетку уже не сделаешь wink.gif Держи пример, разбирайся.
Код

anton@bc /tmp $ cat 1.c
#include <stdio.h>

int main() {
char A[] = "Hellow world!\0";
int i;
for (i = 0; *(A + i) != '\0'; i++)
   printf ("%c", *(A+i));
printf ("\n");
return 0;
}
anton@bc /tmp $ gcc -Wall 1.c && ./a.out
Hellow world!
anton@bc /tmp $


Что это вообще и что в моём предыдущем коде такого прям ужастного?

Сообщение отредактировал HELKERN - 27.2.2010, 10:11
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
NortT
сообщение 27.2.2010, 10:30
Сообщение #6


Любит поговорить
Group Icon


Группа: GNU/Linux
Сообщений: 411
Регистрация: 28.2.2008
Пользователь №: 22 566



Репутация:   16  


Так понимаю выводит на экран строку Hello world как раз через указатели. Осталось только добавить проверку на согласность букв. Можно например сделать строку из согласных букв и искать с помощью strpos вхождения *(A+i) в эту строку, если вхождение есть то просто не печатаем данную букву, если вхождения нет - печатаем.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
mephisto
сообщение 27.2.2010, 11:28
Сообщение #7


ортодоксальный линуксоид
Group Icon


Группа: VIP
Сообщений: 7 724
Регистрация: 17.11.2007
Из: столицы вашей родины
Пользователь №: 10 849



Цитата(HELKERN @ 27.2.2010, 9:05) *

Вот это другой разговор) А то mephisto предложил адрес сравнивать с символами \0

mephisto просто забыл звёздочку поставить, я на Си уже месяца два не писал вообще
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
HELKERN
сообщение 27.2.2010, 11:35
Сообщение #8


Ближе бандерлоги. Ближе.
Group Icon


Группа: Sibnet-club
Сообщений: 3 460
Регистрация: 22.2.2008
Из: Улан-Удэ
Пользователь №: 21 789



Репутация:   745  


Цитата(mephisto @ 27.2.2010, 12:28) *

mephisto просто забыл звёздочку поставить, я на Си уже месяца два не писал вообще

Окей

Я уже додумался сам, не без ваших идей)

Кому интересно то вот:

» Спойлер (нажмите, чтобы прочесть) «
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Linky
сообщение 27.2.2010, 12:04
Сообщение #9


МЕГА флудер
Group Icon


Группа: Sibnet-club
Сообщений: 3 466
Регистрация: 31.3.2008
Из: Барнаул
Пользователь №: 27 560



Репутация:   243  


Цитата(HELKERN @ 27.2.2010, 10:35) *

Я уже додумался сам, не без ваших идей)
Кому интересно то вот:

интересно smile.gif
Код

// излишне это всё :) я бы лучше как у mephisto сделал, но дело не в этом
char B[10];
char C[10]; //
char * a,* b,* c;

нужно нулями инициализировать то что потом выводишь, ну или перед выводом последний элемент сделать = '\0' если массив на стеке, т.к. не гарантируется что там нулями будут, как у глобальных переменных например
Код

linky@tfmf:~$ gcc -Wall main2.c && ./a.out
main2.c:3: warning: return type of ‘main’ is not ‘int’
/tmp/ccu7ttBU.o: In function `main':
main2.c:(.text+0x45): warning: the `gets' function is dangerous and should not be used.
Vvedite stroky ne bolshe 10 simvolov
asd dsa
aa�
   D
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
HELKERN
сообщение 27.2.2010, 14:16
Сообщение #10


Ближе бандерлоги. Ближе.
Group Icon


Группа: Sibnet-club
Сообщений: 3 460
Регистрация: 22.2.2008
Из: Улан-Удэ
Пользователь №: 21 789



Репутация:   745  


Цитата(Linky @ 27.2.2010, 13:04) *

как у глобальных переменных например

а я же не локальные переменные обьявил biggrin.gif
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Linky
сообщение 27.2.2010, 14:42
Сообщение #11


МЕГА флудер
Group Icon


Группа: Sibnet-club
Сообщений: 3 466
Регистрация: 31.3.2008
Из: Барнаул
Пользователь №: 27 560



Репутация:   243  


Цитата(HELKERN @ 27.2.2010, 13:16) *

а я же не локальные переменные обьявил biggrin.gif

как раз таки у тебя локальные, main обычная ф-я за небольшим исключением, то что она является точкой входа, которую кстати можно сменить,
и массивы на стеке разместились, а не в секции данных как у глобальных smile.gif

Сообщение отредактировал Linky - 27.2.2010, 14:49
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
mephisto
сообщение 28.2.2010, 11:41
Сообщение #12


ортодоксальный линуксоид
Group Icon


Группа: VIP
Сообщений: 7 724
Регистрация: 17.11.2007
Из: столицы вашей родины
Пользователь №: 10 849



Цитата(lunserv @ 27.2.2010, 22:55) *

че то все на линуксе.
кстати интегрировал icc в eclipse, установил mkl, но вот mkl функции не хотят компилятся, надо как то библиотеки подключать.

off.gif ban.png
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
HELKERN
сообщение 28.2.2010, 20:58
Сообщение #13


Ближе бандерлоги. Ближе.
Group Icon


Группа: Sibnet-club
Сообщений: 3 460
Регистрация: 22.2.2008
Из: Улан-Удэ
Пользователь №: 21 789



Репутация:   745  


Цитата(Linky @ 27.2.2010, 15:42) *

как раз таки у тебя локальные, main обычная ф-я за небольшим исключением, то что она является точкой входа, которую кстати можно сменить,
и массивы на стеке разместились, а не в секции данных как у глобальных smile.gif

char A[15]="aieoquyAIEOQUY";
char B[10];
char C[10];
char *a,*b,*c;


Это локальные переменные? 0_о подумай еще раз)
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Linky
сообщение 28.2.2010, 21:22
Сообщение #14


МЕГА флудер
Group Icon


Группа: Sibnet-club
Сообщений: 3 466
Регистрация: 31.3.2008
Из: Барнаул
Пользователь №: 27 560



Репутация:   243  


хм, странно smile.gif когда проверял были локальные
наверно случайно скопировал их в main
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. просматривают этот форум (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 24.4.2024, 2:48
Редакция: (383) 347-86-84

Техподдержка:
help.sibnet.ru
Размещение рекламы:
тел: (383) 347-06-78, 347-10-50

Правила использования материалов