![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
sheka |
![]()
Сообщение
#1
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Подскажите, пожалуйста, как из строки удалить слово?
Пока реализовывал, понял из strcat, что char и const char разные типы (почему, что, где еще пока не понял). Решил обойти этот момент через указатели, но здесь меня вообще убило. #include <stdio.h> получаются чудеса: в *n хранится часть строки s. Если не ошибаюсь, вот эта the 1995 model. Следственно закомментированая строка ее очищает. И, самое поразительное, что потом при n=s; в n сохраняется оставшаяся часть строки The; first E36 M3, to be imported to the United States: was. Сможете объяснить такой феномен? ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата получаются чудеса: в *n хранится часть строки s Во-первых, в *n ничего не хранится. n указывает куда-то. Чувствуешь разницу? Второе: любой компилятор тебя предупредит, что переменная n не инициализирована (а стало быть может указывать куда угодно). Третье - и что тебе показывает тот код, который приведен? Мне оно говорит вот что:The; first E36 M3, to be imported to the United States: was the 1995 model. , попутно пытаясь послать отчет Биллу Гейтсу (при попытке распечатать строку, на которую указывает n). Цитата И, самое поразительное, что потом при n=s; в n сохраняется оставшаяся часть строки Еще раз: в n ничего не сохраняется, кроме указателя на строку. Ты приравнял один указатель другому (а не одну строку другой). То, на что указывала s теперь скопировано и в n (n указывает туда же). И что ты удивляешься? |
sheka |
![]()
Сообщение
#3
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
С указателями разобрался, но все таки с char и const char в strcat не могу. Помогите, пожалуйста, закомментированый код на Си перевести. Также хотел бы узнать как стоку "обнулить" (n:='';)
#include <stdio.h> |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Не-не-не... Не надо переводить код, работающий со строками с Паскаля на С. Уж очень по-разному эти языки со строками работают. Ты лучше задачу поставь, что именно тебе надо сделать? Какое слово ты хочешь из строки удалить? Покажем, как это сделать в стиле С...
|
sheka |
![]()
Сообщение
#5
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Да любое. Например, если в слово имеет определенную длину. Мне бы принцип понять) Я сделал с помощью strtok, но он же выделяет только слова, а разделители отсекаются.
Добавлено через 5 мин. Так же меня удивило, что *p не является const char. |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Вот так:
#include <stdio.h> |
sheka |
![]()
Сообщение
#7
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
char s[256] = {0}; Это очистка строки?
Добавлено через 14 мин. Класс! ![]() Только на паскаль не похоже... А реализация с помощью strcat, strlen возможна? Добавлено через 2 мин. И, надеюсь, последний вопросик: вот эту (ispunct(*p)!=NULL)||(*p==' ') строку вы заменили на strchr(";:.,!? ", *p) с какой-то целью или просто, для наглядности? |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Цитата char s[256] = {0}; Это очистка строки? Да, это присвоение каждому элементу (символу) строки значения 0. В случае символа происходит приведение 0 к типу char, и записывается '\0'Цитата Только на паскаль не похоже... Я ж тебе говорил, что это разные методы ![]() Цитата А реализация с помощью strcat, strlen возможна? Может и возможна, но мне проще не извращаться с использованием этих функций, а написать без них.Добавлено через 5 мин. Цитата вот эту (ispunct(*p)!=NULL)||(*p==' ') строку вы заменили на strchr(";:.,!? ", *p) с какой-то целью или просто, для наглядности? Мне так проще, потому что я сам устанавливаю, что именно является разделителем, а не кто-то за меня устанавливает. Вот видишь, тебе понадобилось добавить пробел - добавлено еще одно условие. А если надо учесть еще и скобки? Еще 2 условия добавлять будешь? В моем случае достаточно добавить все необходимые символы в первый параметр strchr, и никаких дополнительных условий не надо. |
sheka |
![]()
Сообщение
#9
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Цитата А реализация с помощью strcat, strlen возможна? Может и возможна, но мне проще не извращаться с использованием этих функций, а написать без них. А вот тогда как можно сделать, например, такую задачу: Ввести строку и присоединить ее к другой. const char *s1="mama \0"; Каким образом можно считать строку в переменную? %s до пробела считывает. Для strcat не подходит формат ни первой, ни второй строки. Неужели как-то так *pp++ = *p; ? |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
scanf - это далеко не единственная функция для ввода строк, если что... Еще есть gets, например, которая читает до '\n'
|
sheka |
![]()
Сообщение
#11
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Допустим считал, а дальше как?
Кстати, я проверил, ispunct как и написано в книжке отбирает "все печатаемые символы, которые не относятся ни к алфавитно-цифровым, ни к "пробельным", т.е. скобки тоже входят. |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Цитата т.е. скобки тоже входят. Ага. А если мне НЕ надо, чтоб скобки входили - что делать? ![]() Цитата а дальше как? А дальше - понять: то, что описывается как const char * изменяться не может. Следовательно, нужно одну неконстантную строку для ввода, а вторую - для хранения результата:const char *s1="mama \0"; |
![]() ![]() |
![]() |
Текстовая версия | 22.07.2025 2:14 |