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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.56
frech
33 / 33 / 0
Регистрация: 17.07.2008
Сообщений: 543
#1

удаление символа из предложения - C++

17.08.2008, 14:11. Просмотров 1215. Ответов 7
Метки нет (Все метки)

есть такой часть класса, который удаляет символ из предложение:
Код
char* strin::operator-(char letter)
{
    int i,j;
    char temp[256];

    for (i = 0, j=0; data[i]; i++) {
        if (data[i]!=letter) {
            temp[j++]=data[i];
        }
        temp[j]=NULL;
    }
    return (strcpy(data,temp));
}
здесь не могу понять вот это:
Код
for (i = 0, j=0; data[i]; i++) {
        if (data[i]!=letter) {
            temp[j++]=data[i];
        }
        temp[j]=NULL;
    }
зачем тут:
temp[j]=NULL;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Счастливчик
19 / 18 / 0
Регистрация: 04.08.2008
Сообщений: 31
17.08.2008, 15:12     удаление символа из предложения #2
Цитата Сообщение от frech
зачем тут:
temp[j]=NULL;
Для удобства работы с символьными массивами при помощи циклов, в C++ зарезервирован специальный нулевой символ "\0", его ставят в конце массива.
Вероятно NULL и '\0' одно и тоже.
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
17.08.2008, 15:13     удаление символа из предложения #3
для начала подучите русский, потому, что читать "что-та неясно" и "есть такой часть класса" на приличном форуме не хочется. все-таки это вам не блондинистый чат.
temp[j]=NULL; надо для того, чтобы обнулить строку, т.к. temp - массив указателей.
Счастливчик, если я не ошибаюсь, ты вы сильно заблужаетесь. "\0" - символ конца строки, а NULL - указатель
frech
33 / 33 / 0
Регистрация: 17.07.2008
Сообщений: 543
17.08.2008, 15:20  [ТС]     удаление символа из предложения #4
ну и без "temp[j]=NULL" все работает.
Счастливчик
19 / 18 / 0
Регистрация: 04.08.2008
Сообщений: 31
17.08.2008, 16:24     удаление символа из предложения #5
Цитата Сообщение от Spo1ler
temp - массив указателей
temp массив символов
Цитата Сообщение от frech
char temp[256];

Цитата Сообщение от Spo1ler
Счастливчик, если я не ошибаюсь, ты вы сильно заблужаетесь. "\0" - символ конца строки, а NULL - указатель
Заблуждаюсь, но не сильно. Это конечно разные вещи, но используются здесь они одинаково.

Вот, посмотрите:

Код
#include <iostream>
using namespace std;
int main()   {
    char massive[10];
    int i;
    for(i = 0; i<=9;i++)  {                            // Заполняем массив, и печатаем его
                       massive[i] = 'a';
                       cout << massive[i] << " ";
                       
                       } 
                       
                       massive[i] = NULL;  // или massive[i] = '/0' (всё равно)
                       
                       cout << endl;
                       
                       for(i = 0; massive[i]!=0;i++)  {   //
                       
                       cout << massive[i] << " ";
                       
                       } 
                       
                       
                      
                       cout << endl;
                       
                       
                       
                       
                       
                       
                       system("pause");
                       return 0;
                       }
Результат будет одинаковый, при использовании NULL и '\0'.
XuTPbIu_MuHTAu
Эксперт C++
2221 / 736 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
17.08.2008, 16:38     удаление символа из предложения #6
Цитата Сообщение от frech Посмотреть сообщение
ну и без "temp[j]=NULL" все работает.
Вы в Visual C++ пишете? Попробуйте убрать эту строчку,а скомпилировать не Debug а Release. Вот тогда работать не будет А всё почему? потому что дебаг выделяет память по-другому,частенько инициализируя все подряд нулями. Однако,если вы поставите релиз и не отметите конец строки temp,поставив нулевой символ где надо,увидите при выводе и любой другой работе с ней ее саму + абракадабру,а скорее всего просто аксесс виолейшн. Поотому что темп еще копируется,и переполнит целевую сроку. В общем,последствий может быть масса.
Только я одно не понял - зачем делать это на каждом шаге цикла. Можно после..

Цитата Сообщение от Spo1ler Посмотреть сообщение
"\0" - символ конца строки, а NULL - указатель
Смотрим определение NULL:
Код
#ifndef NULL
#ifdef  __cplusplus
#define NULL    0 
#else
#define NULL    ((void *)0)
#endif
#endif
В stdio.h
Фактически,это ноль. Вообще говоря,действительно, лучше использовать '\0' как символ конца строки,а NULL - указатель. Иначе зачем их вообще отдельно называть,можно везде просто нули лепить Но практически,можно NULL ставить вместо нуля везде.....
CheshireCat
Эксперт С++
2890 / 1239 / 78
Регистрация: 27.05.2008
Сообщений: 3,327
18.08.2008, 10:17     удаление символа из предложения #7
Цитата Сообщение от Счастливчик Посмотреть сообщение
Результат будет одинаковый, при использовании NULL и '\0'.
Это заблуждение. На данном конкретном компиляторе - да, возможно, у тебя и получится одинаковый результат. Но, вообще говоря, результаты могут быть и разными!

Стандарт 14998 гарантирует корректное преобразование 0 -> NULL, но нигде не гарантирует корректность обратного преобразования, т.е. NULL -> 0. Если где-то что-то написано в stdio.h - то это всего лишь фича конкретного компилятора.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2008, 11:25     удаление символа из предложения
Еще ссылки по теме:

C++ удаление символа '\n' в string
C++ Удаление символа в строке
Удаление предлога из предложения C++
Удаление символа из строки C++
Даны предложения. Заменить в нем все вхождения символа 'а' на '$' C++

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

Или воспользуйтесь поиском по форуму:
XuTPbIu_MuHTAu
Эксперт C++
2221 / 736 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
18.08.2008, 11:25     удаление символа из предложения #8
Кусок,связанный c NULL и стандартами перенес в новую тему,а эту закрою,тема раскрыта, а оффтопить так и тянет.
Yandex
Объявления
18.08.2008, 11:25     удаление символа из предложения
Закрытая тема Создать тему
Опции темы

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