Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: [С++] Задача на работу со строкой  (Прочитано 19676 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Наталья 2506
Гость
« : 10-12-2008 13:58 » 

 RTFM
у меня вот такая задача:
С клавиатуры вводится строка. Выберите их нее все буквы от J(j) до S(s), строчные преобразуйте в прописные и отсортируйте их в алфавитном порядке. Допустимые символы - прописные и стррочные латинские буквы!  А черт его знает...

Помогите, пожалуйста!  Внимание! Говорит и показывает...
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 10-12-2008 14:01 » 

Преобразовывать вручную, или можно использовать функции стандартной библиотеки? С сортировкой тот же вопрос.
Записан
Наталья 2506
Гость
« Ответ #2 : 10-12-2008 14:04 » 

можно использовать стандартные библиотеки!:)
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 10-12-2008 14:24 » 

toupper - преобразовние
а сортировка - пузырьковая
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Наталья 2506
Гость
« Ответ #4 : 10-12-2008 14:25 » 

а что такое пузырьковая сортировка?
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 10-12-2008 14:26 » 

сортировка методом пузырьков Улыбаюсь (обмен соседних)
Записан
Наталья 2506
Гость
« Ответ #6 : 10-12-2008 14:27 » 

да...пойду узнавать, что это такое...
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 10-12-2008 14:27 » 

Наталья 2506, я тебе дал наводку - поиск рулит!
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Наталья 2506
Гость
« Ответ #8 : 10-12-2008 14:31 » 

Спасибо!)
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #9 : 11-12-2008 05:29 » 

можно без сортировки Улыбаюсь

дергаем из строки по букве делает toupper и помещаем в std::set<char>
потом выводим на экран
for(iterator it = mySet.begin(); it != mySet.end(); ++it)

вариант 2 (но с сортировкой):

дергаем из строки по букве делает toupper и помещаем в std::vector<char> или std::string
делаем sort и uniq и выводим на экран.
« Последнее редактирование: 11-12-2008 05:32 от LogRus » Записан

Странно всё это....
Наталья 2506
Гость
« Ответ #10 : 11-12-2008 16:19 » 

всем спасибо, задача сделана! Улыбаюсь)
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 11-12-2008 16:22 » 

Наталья 2506, ой! молодца!
код покажи, похвастайся!
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 11-12-2008 20:13 » 

Можно так решать:
Код: (Ruby)
def lettersSelector(string)
 letters = Array.new
 string.upcase.scan(/./) { | letter |
  letters.push(letter) if letter >= "J" and letter <= "S" and not letters.include?(letter)
 }
 return letters.sort { | x, y | x <=> y }
end

puts(lettersSelector(gets))
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Наталья 2506
Гость
« Ответ #13 : 12-12-2008 03:51 » 

Sla, вот программа!:)

Код:
#include<stdio.h>
#include<string.h>
int main(){
char s[50],c;
int i,j,l;
printf("\nStroka: ");
scanf("%s",s);
l=strlen(s);
for(i=0;i<l;i++)
if(s[i]>='a')s[i]-=32;

for(i=0;i<l;i++)
for(j=i+1;j<l;j++)
if(s[i]>s[j]){
c=s[i];
s[i]=s[j];
s[j]=c;
}
for(i=0;i<l;i++)
if(s[i]>='J'&&s[i]<='S')printf("%c",s[i]);
scanf("%c");
getchar();
}
« Последнее редактирование: 12-12-2008 04:56 от Алексей1153++ » Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #14 : 12-12-2008 06:33 » 

немного отформатировал и поправил:
Код:
#include<stdio.h>
#include<string.h>

int main(){
char s[] = "saflkasnklfjaskljdfawepruqwuivn,xnzJFSFFNDASVKOEOMWFNDF";
char c;
int l = strlen(s);
for(int i=0; i<l; i++)
{
if(s[i]>='a')
s[i]-=32;
}

for(int i=0; i < l ;i++)
{
for(int j= i+1; j<l; j++)
{
if(s[i]>s[j])
{
c=s[i];
s[i]=s[j];
s[j]=c;
}
}
}

for(i=0;i<l;i++)
{
if(s[i]>='J'&&s[i]<='S')
printf("%c",s[i]);

//scanf("%c"); // непонятно зачем
}

getchar();

return 0; // требует стандарт
}

поиграл немного с STL Улыбаюсь решения:
решений номер 2(первое предложила Наталья, которая кстати молодец Улыбаюсь )
Код:
struct ToUpperFnc
{
template<typename T>
void operator()(T & c) const { c = toupper(c); }
};

template<typename T>
bool CheckChar(T c)
{
return c < 'J' || c > 'S';
}

void Solution2(const std::string & s_in)
{
std::string s = s_in;

// можно заменить на copy_if
std::for_each(s.begin(), s.end(), ToUpperFnc());
std::string::iterator it = std::remove_if(s.begin(), s.end(), CheckChar<char>);
s.erase(it, s.end());


std::sort(s.begin(), s.end());

// можно закомментрировать, если нужны все буквы
it = std::unique(s.begin(), s.end());
s.erase(it, s.end());

// вывод результата
std::cout << s << std::endl;
}

решение 3:
Код:
template <typename TCont>
struct InsertFnc
{
TCont & cont_;
InsertFnc(TCont & c) : cont_(c) {}

template<typename T>
void operator()(T & c)
{
char up_c = toupper(c);
if (!CheckChar(up_c))
cont_.insert(up_c);
}
};

template<typename T>
void printT(const T & c)
{
std::cout << c;
}

void Solution3(const std::string & s_in)
{
std::set<char> s; // можно заменить на multi_set, если нужны все буквы (с повторами)
InsertFnc<std::set<char> > f(s);
std::for_each(s_in.begin(), s_in.end(), f);

// вывод результата
std::for_each(s.begin(), s.end(), printT<char>);
std::cout << std::endl;
}
Записан

Странно всё это....
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 12-12-2008 07:50 » 

Наталья 2506, Браво! обошлась без toupper Улыбаюсь
правда я не увидел где же все таки
буквы от J(j) до S(s),
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #16 : 12-12-2008 07:52 » 

Sla,  я тоже под впечатлением Улыбаюсь
с буквами всё нормально, я проверил Улыбаюсь
Записан

Странно всё это....
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #17 : 12-12-2008 10:16 » 

Наталья 2506, Браво! обошлась без toupper Улыбаюсь

Ага, а это что? Ага
Код:
if(s[i]>='a') s[i]-=32;


правда я не увидел где же все таки
буквы от J(j) до S(s),

Вот тут:
Код:
for(i=0;i<l;i++) if(s[i]>='J'&&s[i]<='S')printf("%c",s[i]);

LogRus, ты при форматировании неправильно фигурные скобки расставил.

Код:
//scanf("%c"); // непонятно зачем

Стоит не в цикле, а за циклом. Я думаю это просто чтобы консольное окошко не исчезало, а оставалось стоять.

Код:
getchar();
судя по всему предназначен для того же.
« Последнее редактирование: 12-12-2008 10:27 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 12-12-2008 11:00 » 

Джон, та я в этих S и J погряз не мог их четко распознать Улыбаюсь
в глазах рябит
Код:
for(i=0;i<l;i++) if(s[i]>='J'&&s[i]<='S')

ну кто так пишет?


Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #19 : 12-12-2008 12:08 » new

Эт я так место сэкономил, в оригинале в две строчки написано. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #20 : 12-12-2008 12:54 » 

Наталья 2506, если не хочешь делать
Код:
return 0
, можешь вот это
Код:
int main
заменить на это
Код:
void main
и ничего в конце не возвращать. Хотя это все спорно и т.д. и т.п., так что все таки надежнее и ИМХО правильнее писать
Код:
int main и в конце return что надо
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines