Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
36 / 36 / 3
Регистрация: 17.07.2008
Сообщений: 581

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

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

Студворк — интернет-сервис помощи студентам
есть такой часть класса, который удаляет символ из предложение:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
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));
}
здесь не могу понять вот это:
Code
1
2
3
4
5
6
for (i = 0, j=0; data[i]; i++) {
        if (data[i]!=letter) {
            temp[j++]=data[i];
        }
        temp[j]=NULL;
    }
зачем тут:
temp[j]=NULL;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.08.2008, 14:11
Ответы с готовыми решениями:

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

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

Удаление от символа до символа с заданной позиции
Здравствуйте, подскажите как удалить из файла строку от символа до символа с заданной позиции Спасибо

7
21 / 20 / 0
Регистрация: 04.08.2008
Сообщений: 31
17.08.2008, 15:12
Цитата Сообщение от frech
зачем тут:
temp[j]=NULL;
Для удобства работы с символьными массивами при помощи циклов, в C++ зарезервирован специальный нулевой символ "\0", его ставят в конце массива.
Вероятно NULL и '\0' одно и тоже.
0
 Аватар для Spo1ler
296 / 56 / 5
Регистрация: 22.05.2008
Сообщений: 788
17.08.2008, 15:13
для начала подучите русский, потому, что читать "что-та неясно" и "есть такой часть класса" на приличном форуме не хочется. все-таки это вам не блондинистый чат.
temp[j]=NULL; надо для того, чтобы обнулить строку, т.к. temp - массив указателей.
Счастливчик, если я не ошибаюсь, ты вы сильно заблужаетесь. "\0" - символ конца строки, а NULL - указатель
0
36 / 36 / 3
Регистрация: 17.07.2008
Сообщений: 581
17.08.2008, 15:20  [ТС]
ну и без "temp[j]=NULL" все работает.
0
21 / 20 / 0
Регистрация: 04.08.2008
Сообщений: 31
17.08.2008, 16:24
Цитата Сообщение от Spo1ler
temp - массив указателей
temp массив символов
Цитата Сообщение от frech
char temp[256];

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

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

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#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'.
0
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
17.08.2008, 16:38
Цитата Сообщение от frech Посмотреть сообщение
ну и без "temp[j]=NULL" все работает.
Вы в Visual C++ пишете? Попробуйте убрать эту строчку,а скомпилировать не Debug а Release. Вот тогда работать не будет А всё почему? потому что дебаг выделяет память по-другому,частенько инициализируя все подряд нулями. Однако,если вы поставите релиз и не отметите конец строки temp,поставив нулевой символ где надо,увидите при выводе и любой другой работе с ней ее саму + абракадабру,а скорее всего просто аксесс виолейшн. Поотому что темп еще копируется,и переполнит целевую сроку. В общем,последствий может быть масса.
Только я одно не понял - зачем делать это на каждом шаге цикла. Можно после..

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

Стандарт 14998 гарантирует корректное преобразование 0 -> NULL, но нигде не гарантирует корректность обратного преобразования, т.е. NULL -> 0. Если где-то что-то написано в stdio.h - то это всего лишь фича конкретного компилятора.
0
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
18.08.2008, 11:25
Кусок,связанный c NULL и стандартами перенес в новую тему,а эту закрою,тема раскрыта, а оффтопить так и тянет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.08.2008, 11:25
Помогаю со студенческими работами здесь

Замена регистра символа в начале предложения
В строке, содержащей последовательность слов, найти конец предложения, обозначенный символом &quot;точка&quot;. В следующем ...

Перенос автозаменой символа с конца предложения в начало
Здрасте, есть большой фаил с тестами, вопросы выглядят примерно так: Правоохранительная деятельность представляет собой: 1. вид...

Как в конец предложения в ячейки добавить сразу два символа?
Подскажите пожалуйста как в конец предложения в ячейке добавить сразу два символа пробел и ! То есть например есть Plate Seal а нужно...

Вывести на экран все слова данного предложения, содержащие два или более одинаковых символа
С клавиатуры вводится строка символов, представляющая собой предложение со знаками препинания (точка, запятая, восклицательный знак)....

Удаление слов и букв из середины предложения
Здравствуйте. Подскажите пожалуйста, как удалить слова и буквы из середины, вот пример: &lt;button...


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

Или воспользуйтесь поиском по форуму:
8
Закрытая тема Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru