IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> Строки, :) help!!!
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Серёга

Репутация: -  0  +


Помогите пожалуйста решить такую задачку, что-то никак не соображу!
Код
В пpоизвольном тексте найти и отпечатать все слова, заканчивающиеся буквой r.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


В подфоруме "Задачи" есть прикрепленная тема, называется типа "Все способы разбиения на слова". Зайди в Задачи - сразу ее увидишь.
После того, как текст разбит на слова, останется только пройтись по ним в цикле оператором типа такого:
if w[Length(w)]='r' then WriteLn(w)


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Серёга

Репутация: -  0  +


Спасибо большое!!! Не подскажешь как можно заменить паскалевскую функцию "copy" на что-то похоже в с++?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
как можно заменить паскалевскую функцию "copy" на что-то похоже в с++?
strcpy, strncpy, std::string.substr, мало ли как... Ты расскажи, что ты подразумеваешь под строкой сначала...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Серёга

Репутация: -  0  +


Я имею в виду, как заменить вот этот кусок программы
Код
w[n] := copy(s, back, i-back);
! smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






А я имею в виду, как у тебя описаны W и S...

(не надо никогда дословно переводить программы с Паскаля на С/С++. Проще будет написать заново, чем заставить это перевод работать правильно. Если у тебя чистый С - то strtok в помощь, в две строчки кода делается разбиение на слова. Если С++ - то есть другие средства).
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Серёга

Репутация: -  0  +


Вот я и мучуюсь, как описать w. S описана у меня как char s[100]; А как вот массив строк описать я не понимаю. А как уж присовоение написать подавно. Я новичок, си учу 3 недели только. Подскажи пожалуйста елси можешь. smile.gif

(СПС. Учту на будущее. У меня С++.)

Сообщение отредактировано: acid_burn -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Серёга

Репутация: -  0  +


Помогите пожалуйста решить задачу написанную в первом посте, но уже на языке С++!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






#include <conio.h> // для getch()
#include <stdio.h>
#include <string.h>

int main() {

char s[] = "this is the test for acid_burn: star, force";

// это - разделители: слова в строке могут разделяться пробелами, двоеточиями,
// точками и запятыми... Можешь добавить еще чего-нибудь, если нужно...
char *delimiters = " :,.";


char *result = NULL; // это - простой указатель на строку, инициализированный NULL-ом

// получаем первое слово строки с помощью библиотечной функции strtok:
// первый параметр = строке, которую разбиваем на слова
result = strtok(s, delimiters);

// следующий цикл будет выполняться до тех, пор, пока в строке еще остались слова,
// то есть, пока result не равен NULL (как только он будет NULL - выходим из цикла)
while(result) {
// здесь в result хранится указатель на очередное слово,
// проверяем последний символ этого слова (не забываем ,что в С символы в строке
// индексируются с 0), и если он == 'r' выводим слово на печать
if(result[strlen(result) - 1] == 'r') printf("%s ", result);

// попытка получить следующее слово в заданной строке.
// Особенность функции strtok - в том, что ей после того, как первое слово уже найдено
// не надо указывать саму строку, нужно первым параметром передавать NULL, тогда
// эта функция будет работать с той же строкой, что и при первом вызове...
result = strtok(NULL, delimiters);
}

// Добавляем ожидание нажатия на кнопку...
getch();

return 0; // и выходим из программы
}
Должно работать и для С++, и для чистого С...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Серёга

Репутация: -  0  +


Спасибо огромное smile.gif . Но как сделать чтобы программа задерживалась.(т.е что бы я смог увидеть рез-т)
И ещё, не мог бы ты дать описание программы по каждой строчки, начиная с
Код
  char *result = NULL;
, а то мы ещё такого не проходили.

Сообщение отредактировано: acid_burn -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Комментарии добавлены, ожидание нажатия с клавиатуры - тоже...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Серёга

Репутация: -  0  +


Спасибо за подробное описание. good.gif Теперь разобрался! Ещё раз спасибо! smile.gif

Добавлено через 17 мин.
Код
char *result = NULL;
А для чего его нужно инициализировать нулём?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Цитата
А для чего его нужно инициализировать нулём?
Чтоб там не хранился указатель на какой-нибудь мусор... Желательно вообще инициализировать все переменные при описании. Ну, кстати, совсем не обязательно нулем... Можно сделать так:
...
char *delimiters = " :,.";
char *result = strtok(s, delimiters); // сразу искать первое слово в S
...

 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Серёга

Репутация: -  0  +


Ну всё, вроде отсальное понятно. СПС.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.10.2020 22:58
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name