Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/54: Рейтинг темы: голосов - 54, средняя оценка - 4.94
1 / 1 / 1
Регистрация: 26.11.2011
Сообщений: 33

Вывести все слова, в которых есть буква "a"

29.11.2011, 17:37. Показов 12621. Ответов 69
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
не могу найти ошибку
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int i=0,j=0,a=0,schet=0;
char s[50],s1[50];
     cin.getline(s,50);
             while(i<50)
{
                        if((isspace(s[i])) && (isalnum(s[i-1])))
{    
     j=i-1;schet=0;
             while((!isspace(s[j])) || (s[j]=='\n'))
{    
     j--;
                        if(s[j]=='a')
     schet++;
     }
             for(j;j<i+1;j++)
{
                        if(schet>=1)
     s1[j]=s[j];
}
 
}
    i++;
}cout<<s1<<endl;
getch();
нужно вывести все слова в которых есть буква a

Добавлено через 2 часа 30 минут
помогите пожалуйста...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.11.2011, 17:37
Ответы с готовыми решениями:

Найти все и вывести все слова в которых есть буква "к"
дана строка (ввод с клавы) найти все и вывести все слова в которых есть буква &quot;к&quot;!!!!!!!!!!!!!!!!!!!!!!(разделители между словами...

Вывести слова из предложения, в которых есть буква, встречающийся четыре и более раз
Задачка по С++. С клавиатуры ввести предложения. Напечатать те слова из введенного предложения, в которых есть хотя бы одна буква...

Вывести на экран все слова из К букв, в которых буква Ы встречается более 1 раза, и подсчитать их количество
1)Алфавит языка племени &quot;тумба-юмба&quot; состоит из букв Ы, Ц, Щ и О. Число K вводится с клавиатуры. Вывести на экран все слова из К букв, в...

69
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
29.11.2011, 20:27
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от go Посмотреть сообщение
то разделение на слова нужно делать самому
strtok + strchr + strdup тоже несложно сделать.
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 20:40
fasked, функция strchr ОЧЕНЬ медленная для задач с большими строками, если от нее отказаться, то алгоритм в разы быстрее работает (в десятки раз). Ну да, strtok содержит strpbrk, какая разница, перепутал малость, все равно strtok медленная функция.

Но за алгоритмы реализаций спасибо
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
29.11.2011, 20:41
Цитата Сообщение от Thinker Посмотреть сообщение
ОЧЕНЬ медленная для задач с большими строками
Медленная, если совпадений нет
Я просто не понимаю, как Вы по другому собираетесь искать совпадения символов?
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 20:45
Цитата Сообщение от fasked Посмотреть сообщение
Медленная, если совпадений нет
Есть совпадения, нет совпадений, в среднем медленная. Представьте ситуацию, есть строка set и строка s (тысячи, миллионы символов). Ваша цель - подсчитать количество символов строки s, входящих в строку set. Ваш алгоритм? Например, set = "abc", s="abcxyzabcxyzabc". Ответ 9.
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
29.11.2011, 20:45
непонятен смысл этой строки (47) strchr.
Цитата Сообщение от fasked Посмотреть сообщение
C
1
((unsigned long int) char_ptr & (sizeof (longword) - 1)) != 0;
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
29.11.2011, 20:54
Цитата Сообщение от fasked Посмотреть сообщение
strtok + strchr + strdup тоже несложно сделать.
Это основа программы, а дальше цикл со вложенным их-ом, как я и продемонстрировал.
Ведь правда: хорошо, что можно все проинициализировать, а если вводить, например, gets-ом, то как получить такой же массив строк литералов? Правильно, никак
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
29.11.2011, 20:54
Цитата Сообщение от Thinker Посмотреть сообщение
Ваша цель - подсчитать количество символов строки s, входящих в строку set. Ваш алгоритм? Например, set = "abc", s="abcxyzabcxyzabc". Ответ 9.
вы правы, но тут нужна просто иная функция, я абсолютно согласен что strchr для этой цели неумное решение. Она возвращает даже не символ, а указатель на символ, в то время как для вашей задачи требуется вернуть целое число. тут же очевино что надо пройти по строке и сосчитать количество совпадений.
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 20:57
alkagolik, почему иная, решение в лоб:

C
1
2
3
for (i = count = 0; s[i]; i++)
   if (strchr(set, s[i]))
      count++;
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
29.11.2011, 20:59
Thinker, глупо отказываться от стандартных функций, мотивируя это долго продолжительностью выполнение. На практике ведь, это строки максимум с 10-15 слов, и писать ради них свою функции, и ради этого так "мудрить".
Ладно приведите аналог функции strchr, написанный Вами, который отработает быстрее?
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
29.11.2011, 21:00
Цитата Сообщение от Thinker Посмотреть сообщение
alkagolik, почему иная, решение в лоб:

C
1
2
3
for (i = count = 0; s[i]; i++)
   if (strchr(set, s[i]))
      count++;
тогда правильней так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
char *p = set;
for (i = count = 0; s[i]; i++){
   p = set;
   while (p)
   {
       p = strchr(p, s[i]);
       if (p)
      {
          count++;
         ++p;
      }
   }
}
но опять же для решения приведенного вами примера и это неверное решение. Единственно верным будет так
C
1
2
3
4
5
6
7
8
9
10
int f(char *s, char x)
{
    int a = 0;
    while (*s){
        if ( *s == x)
            ++a;
    ++s;
    }
    return a;
}
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:02
Цитата Сообщение от go Посмотреть сообщение
Thinker, глупо отказываться от стандартных функций, мотивируя это долго продолжительностью выполнение. На практике ведь, это строки максимум с 10-15 слов
В реальных задачах, НИИ и т.д. гигабайты строк

Добавлено через 1 минуту
alkagolik, так подсчитает неправильно, нам же каждый символ нужно проверить строки s, принадлежит ли он строке set
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
29.11.2011, 21:05
Цитата Сообщение от Thinker Посмотреть сообщение
В реальных задачах, НИИ и т.д. гигабайты строк
Вы меня не услышали
Цитата Сообщение от go Посмотреть сообщение
На практике ведь, это строки максимум с 10-15 слов, и писать ради них свою функции, и ради этого так "мудрить".
Добавлено через 26 секунд
Я говорю об авторе темы
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
29.11.2011, 21:05
Цитата Сообщение от alkagolik Посмотреть сообщение
непонятен смысл этой строки (47) strchr.
Цикл хитрым образом смещает указатель так, чтобы потом можно было работать сразу по 4 или 8 байт.
Цитата Сообщение от Thinker Посмотреть сообщение
Представьте ситуацию, есть строка set и строка s (тысячи, миллионы символов).
Нет строки s. Есть один символ s.
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
29.11.2011, 21:11
Цитата Сообщение от Thinker Посмотреть сообщение
alkagolik, так подсчитает неправильно, нам же каждый символ нужно проверить строки s, принадлежит ли он строке set
подкорректировал
0
29.11.2011, 21:12

Не по теме:

Цитата Сообщение от Thinker Посмотреть сообщение
НИИ и т.д.
А в эти заведения я вообще больше ни ногой. Хватило мне впечатлений, теперь буду избегать :D

1
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
29.11.2011, 21:12
Цитата Сообщение от fasked Посмотреть сообщение
Нет строки s. Есть один символ s
нету символа s, есть строка s и символ *s (это юмор )
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:14
Цитата Сообщение от go Посмотреть сообщение
Я говорю об авторе темы
Про учебные задачи не спорю. я про большие объемы информации

Добавлено через 40 секунд
Цитата Сообщение от fasked Посмотреть сообщение
Нет строки s. Есть один символ s.
Ну, это нечестно так упрощать
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
29.11.2011, 21:16
Цитата Сообщение от fasked Посмотреть сообщение
Цикл хитрым образом смещает указатель так, чтобы потом можно было работать сразу по 4 или 8 байт
вы наверное не туда посмотрели. strchr.c строка 47, условие выхода из цикла.
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:17
Цитата Сообщение от alkagolik Посмотреть сообщение
подкорректировал
Зачем так? Если символ s[i] совпал с одним из символов строки set, то дальше зачем поиски?

C
1
2
3
for (i = count = 0; s[i]; i++)
   if (strchr(set, s[i]))
      count++;
Не более
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
29.11.2011, 21:21
Цитата Сообщение от Thinker Посмотреть сообщение
Ну, это нечестно так упрощать
Так мы же про strchr говорим, а она принимает символ для поиска, а не строку символов. Или я что-то опять пропустил в разговоре?
Цитата Сообщение от alkagolik Посмотреть сообщение
вы наверное не туда посмотрели. strchr.c строка 47, условие выхода из цикла.
Туда-туда.
C
1
((unsigned long int) char_ptr & (sizeof (longword) - 1)) != 0;
Указатель выравнивается так, чтобы было удобнее и быстрее работать по 4 или 8 байт за раз. Фактически проверяется кратность адреса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.11.2011, 21:21
Помогаю со студенческими работами здесь

Рекурсия. Вывести на экран все слова из k букв, в которых буква Ы встречается больше 1 раза и посчитать их кол-во.
Алфавит языка племени &quot;тумба-юмба&quot; состоит из букв Ы, Ц, Щ и О. Число k вводится с клавиатуры. 1) Вывести на экран все слова из k...

Что здесь неправильно? (Вывести все слова строки в которых первая буква входит в него ещё раз)
Задание: Вывести все слова строки в которых первая буква входит в него ещё раз. #include &lt;iostream&gt; #include &lt;string&gt;...

Даны буква и текст заканчивающийся точкой. Вывести слова в которых эта буква встречается наибольшее количество раз
Даны буква и текст заканчивающийся точкой. Вывести слова в которых эта буква встречается наибольшее количество раз. Если их несколько...

Вывести все слова, в которых первая буква "а"
Вывести все слова, в которых первая буква &quot;а&quot;. Нужно сделать через посимвольную обработку. Не получается вывести слова int...

Вывести все слова строки, в которых есть удвоение букв
Помогите написать программу которая выводит все слова из строки в которых есть удвоение букв, а если их нет выводит сообщение что их нет. ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru