Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++]Строки+указатели, по обычному сделал, а вот с указателями 
V
    Опции темы
Palladin
Дата 21.1.2007, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

Репутация: 3
Всего: 17



Пишу на С++, создавая консольное приложение в Borland C++ 6

Вот задача:

Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие  клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина L>10, то удаляются все цифры.

Лаба из двух частей: 1) сделать по обычному 2) с использованием указателей

1 пункт я сделал(код ниже), а вот с указателями что-то ен получается, вроде и делаю подобно тому как в книге, а чет не то, вообщем вот код без указателей, переделайте его плз чтоб с использование указателей!!!


Код

int main()
{
char s[100];
char s2[100];
int d,n,i,t;
cout<<"Vvedite stroku: ";
cin.get(s,100);
cout<<endl;
t=0;
if(strlen(s)>10)
{
for(i=0;i<strlen(s);i++)
{
if(s[i]!='0')
{
if(s[i]!='1')
{
if(s[i]!='2')
{
if(s[i]!='3')
{
if(s[i]!='4')
{
if(s[i]!='5')
{
if(s[i]!='6')
{
if(s[i]!='7')
{
if(s[i]!='8')
{
if(s[i]!='9')
{
s2[t]=s[i]; t++;
}}}}}}}}}}}}




if(strlen(s)>10)
{
cout<<"STROKA:";
for(i=0;i<t;i++)
cout<<s2[i];
}
if(strlen(s)<10)
cout<<"STROKA:"<<s<<endl;


getch();
return 0;
}



--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
SparF
Дата 21.1.2007, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 14.9.2006
Где: Санкт-Петербург/М осква

Репутация: 1
Всего: 18



Код

// roor.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <new>
#include <conio.h>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    char *s;
    char *s2;
    int d,n,i,t;

    s = new char[100];
    s2 = new char[100];

    cout<<"Vvedite stroku: ";
    cin.get(s,100);
    cout<<endl;
    t=0;
    if(strlen(s)>10)
        for(i=0;i<strlen(s);i++)
            if(*(s+i*sizeof(char))<'0'||*(s+i*sizeof(char))>'9'){
                *(s2+t*sizeof(char))=*(s+i*sizeof(char)); 
                t++;
            }

    if(strlen(s)>10){
        cout<<"STROKA:";
        for(i=0;i<t;i++)
        cout<<*(s2+i*sizeof(char));
    }
    else 
        cout<<"STROKA:"<<s<<endl;
    getch();
    return 0;
}


Добавлено @ 23:18 
я тут немного ее еще оптимизировал) а то лишнего много было)


--------------------
Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux!
PM MAIL ICQ   Вверх
Palladin
Дата 22.1.2007, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

Репутация: 3
Всего: 17



Ща протещу, сенкс, эт ты ифы мои убралsmile) ненадо было, по заданию такsmile)) 


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
Palladin
Дата 22.1.2007, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

Репутация: 3
Всего: 17



Все норм пашет, тока вот ты память походу забыл освободить, но я незнаю как там кактто с помощью delete:) и ещё объясни че это за sizeof(char)??? s+i я понял это типа s[i] а вот зачем сайзоф и что это такое, плз объясни


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
Palladin
Дата 22.1.2007, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

Репутация: 3
Всего: 17



Что-то тесты показали что программа прекрасно работает и без sizeof(char) smile))

Сорри за оффтоп


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
zkv
Дата 22.1.2007, 03:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 21
Всего: 92



Цитата(RooR @  22.1.2007,  01:12 Найти цитируемый пост)
и ещё объясни че это за sizeof(char)???

sizeof(TYPE) - возвращает размер памяти в байтах занимаемый переменной типа TYPE. В твоем случае работает без него так же как и с ним потому что размер char'а равен 1 байту. 
но учти, что SparF был не прав так используя этот оператор:
*(s + i * sizeof( char ) ), просто повезло, что опять таки, sizeof( char ) == 1
поясню на примере
Код

unsigned int    vInt[10];
unsigned int *pInt = &vInt[0];
//сдвигаемся к следующему элементу
pInt += sizeof( unsigned int );//в этом случае pInt указывает на элемент с индексом 2
pInt += 1; //в этом случае pInt указывает на элемент с индексом 1

те компилятор сам смотрит какого типа указатель, и расчитывает нужное количество байт, программисту нужно лишь указать число элементов
НО, необходимо помнить что нужное смещение расчитывается на основе типа указателяа не массива, например :
Код

unsigned int    vInt[10];
char *pChar = (char)&vInt[0];
//сдвигаемся к следующему элементу
pInt += sizeof( unsigned int );//в этом случае pInt указывает на первый байт элемента с индексом 1
pInt += 1; //в этом случае pInt указывает на второй байт элемента с индексом 0

PM MAIL   Вверх
Palladin
Дата 22.1.2007, 03:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

Репутация: 3
Всего: 17



Вот эт я понимаю, исчерпывающий ответ, покрайней мере для меняsmile) сенкс smile 

я тут топ создал тож про указатели но уже с массивами. можеш подправить, а лучше какуюнить методичку по двумерным массивам+указателям выложить в том топе??? вообщем топ этом же форуме называется [C++]Массивы+указатели smile 

Это сообщение отредактировал(а) RooR - 22.1.2007, 03:40


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
SparF
Дата 22.1.2007, 05:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 14.9.2006
Где: Санкт-Петербург/М осква

Репутация: 1
Всего: 18



Итак, конечный вариант:
Код

// roor.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <new>
#include <conio.h>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    char *s;
    char *s2;
    int d,n,i,t;

    s = new char[100];
    s2 = new char[100];

    cout<<"Vvedite stroku: ";
    cin.get(s,100);
    cout<<endl;
    t=0;
    if(strlen(s)>10)
        for(i=0;i<strlen(s);i++)
            if(*(s+i)<'0'||*(s+i)>'9'){
                *(s2+t)=*(s+i); 
                t++;
            }

    if(strlen(s)>10){
        cout<<"STROKA:";
        for(i=0;i<t;i++)
        cout<<*(s2+i);
    }
    else 
        cout<<"STROKA:"<<s<<endl;

    delete s;
    delete s2;
    getch();
    return 0;
}


zkv, Спасибо))


--------------------
Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux!
PM MAIL ICQ   Вверх
Palladin
Дата 23.1.2007, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

Репутация: 3
Всего: 17



Сенкс всем


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.