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

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

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

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

17.08.2008, 14:11. Просмотров 1307. Ответов 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;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2008, 14:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос удаление символа из предложения (C++):

Даны предложения. Заменить в нем все вхождения символа 'а' на '$' - C++
Даны предложения. Заменить в нем все вхождения символа 'а' на '$'

Удаление предлога из предложения - C++
Здравствуйте. Подскажите пожалуйста как удалить предлоги (если попадаются) из предложения. Код вот такой, но он не удаляет предлог ("на")....

Удаление символа - C++
как удалить последний символ в файле ???

Удаление символа в строке - C++
Подскажите какой функцией удалять символ в строке (String не использовать).

Удаление символа из строки - C++
Подскажите пожалуйста где я затупил ) Программа уделяет нужный символ, но после этого дописывает пустые символы... Как задать в нужном...

Удаление символа строки - C++
Здравствуйте а есть такая функция которая удаляет из строки выбранный символ и соответственно сдвигает остальные

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Счастливчик
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
Сообщений: 553
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
Эксперт С++
2224 / 739 / 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
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,368
18.08.2008, 10:17 #7
Цитата Сообщение от Счастливчик Посмотреть сообщение
Результат будет одинаковый, при использовании NULL и '\0'.
Это заблуждение. На данном конкретном компиляторе - да, возможно, у тебя и получится одинаковый результат. Но, вообще говоря, результаты могут быть и разными!

Стандарт 14998 гарантирует корректное преобразование 0 -> NULL, но нигде не гарантирует корректность обратного преобразования, т.е. NULL -> 0. Если где-то что-то написано в stdio.h - то это всего лишь фича конкретного компилятора.
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
18.08.2008, 11:25 #8
Кусок,связанный c NULL и стандартами перенес в новую тему,а эту закрою,тема раскрыта, а оффтопить так и тянет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2008, 11:25
Привет! Вот еще темы с ответами:

Удаление символа 'Е' перед 'N' - C++
Здравствуйте. Задача такая:в циклическом односвязном списке удалить все буквы &quot;Е&quot;,которые находятся перед &quot;N&quot;. Как можно было бы...

удаление символа '\n' в string - C++
Здравствуйте! Я видимо наверно жутко туплю, но я никак не пойму почему при попытке удалении в строке символа новой строки '\n' у меня в...

Удаление символа из массива - C++
Следует удалить из массива требуемый символ, а остальные символы продублировать #include &lt;iostream&gt; #include &lt;cstring&gt; using...

Удаление символа из строки - C++
всем привет как можно удалить символ из строки? посоветовали воспользоваться ф-ей memmove, но я новичек и не очень понял.. если...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.08.2008, 11:25
Закрытая тема Создать тему
Опции темы

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