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

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

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

Author24 — интернет-сервис помощи студентам
не могу найти ошибку
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2011, 17:37
Ответы с готовыми решениями:

Найти все и вывести все слова в которых есть буква "к"
дана строка (ввод с клавы) найти все и вывести все слова в которых есть буква...

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

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

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

69
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:23 41
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от fasked Посмотреть сообщение
Так мы же про strchr говорим, а она принимает символ для поиска, а не строку символов.
fasked, хорошо, по-другому, в посте 39 приведен пример использования strchr, но пример как не эффективно использовать эту функцию. Вы же не привели свой алгоритм решения задачи с set и s
0
Заблокирован
29.11.2011, 21:34 42
Цитата Сообщение от Thinker Посмотреть сообщение
Зачем так? Если символ s[i] совпал с одним из символов строки set, то дальше зачем поиски?
Цитата Сообщение от Thinker Посмотреть сообщение
Представьте ситуацию, есть строка set и строка s (тысячи, миллионы символов). Ваша цель - подсчитать количество символов строки s, входящих в строку set. Ваш алгоритм? Например, set = "abc", s="abcxyzabcxyzabc". Ответ 9.
решение
C
1
2
3
4
for (int i = count = 0; i < strlen(set); ++i)
{
    count += f(s, set[i]);
}
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
29.11.2011, 21:35 43
Цитата Сообщение от Thinker Посмотреть сообщение
хорошо, по-другому, в посте 39 приведен пример использования strchr, но пример как не эффективно использовать эту функцию.
Ну по-началу пошел бы по пути наименьшего сопротивления:
C
1
2
3
4
5
for (p = set; *p; ++p) {
   for (q = s; *q; ++q) {
      if (*q == *p) ++count;
   }
}
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:38 44
alkagolik, моя вина, что не сказал, что set - множество символов, то есть там нет одинаковых символов.

Добавлено через 1 минуту
fasked, сложность вашего алгоритма O(mn), где m = strlen(set), n = strlen(s)
0
Заблокирован
29.11.2011, 21:38 45
Цитата Сообщение от Thinker Посмотреть сообщение
alkagolik, моя вина, что не сказал, что set - множество символов, то есть там нет одинаковых символов.
так это же ничего не меняет. вы наверное запутались.
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
29.11.2011, 21:39 46
Цитата Сообщение от Thinker Посмотреть сообщение
моя вина, что не сказал, что set - множество символов, то есть там нет одинаковых символов.
Давайте-ка точнее set - без повторовю А найти надо что? Общее количество совпадений? Или просто определить встречается ли каждый из символов в строке хотя бы один раз?
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:40 47
Цитата Сообщение от alkagolik Посмотреть сообщение
так это же ничего не меняет. вы наверное запутались.
Если символ c входит в строку set, то другого такого же символа c в set уже нет, я об этом
0
Заблокирован
29.11.2011, 21:41 48
ну видимо я запутался
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:42 49
Цитата Сообщение от fasked Посмотреть сообщение
Давайте-ка точнее set - без повторовю А найти надо что? Общее количество совпадений? Или просто определить встречается ли каждый из символов в строке хотя бы один раз?
set это строка без повторяющихся символов, s - произвольная строка. Требуется подсчитать количество символов из строки s, содержащихся в set. Например, set = "123". s = "321abc11". Ответ 5
0
Заблокирован
29.11.2011, 21:45 50
Цитата Сообщение от Thinker Посмотреть сообщение
Ваша цель - подсчитать количество символов строки s, входящих в строку set.
или все таки вы?

Добавлено через 2 минуты
Thinker, решение ссылка + ссылка = решение
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:47 51
Цитата Сообщение от alkagolik Посмотреть сообщение
или все таки вы?
Нет, я же придумал задачу У нас вопрос не сколько различных символов из s принадлежит set (это другая задача, тоже интересная), а сколько в строке s символов, которые принадлежат set, например, усли set="01...9", то мы считаем количество цифр в строке и т.д.
0
Заблокирован
29.11.2011, 21:48 52
Цитата Сообщение от Thinker Посмотреть сообщение
а сколько в строке s символов, которые принадлежат set, например, усли set="01...9", то мы считаем количество цифр в строке и т.д.
так я вам уже несколько раз показал решение и конечно strchr тут неуместно.
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:52 53
Цитата Сообщение от alkagolik Посмотреть сообщение
так я вам уже несколько раз показал решение и конечно strchr тут неуместно.
Хорошо, ваш алгоритм к строкам set = "123", s = "321abc1122" какой ответ дает?
0
Заблокирован
29.11.2011, 21:57 54
Цитата Сообщение от Thinker Посмотреть сообщение
Хорошо, ваш алгоритм к строкам set = "123", s = "321abc1122" какой ответ дает?
Код
deadman@gnomik:~$ cat file.c 
#include <stdio.h>

int f(char *s, char x)
{
    int a = 0;
    while (*s)
    {
        if ( *s == x)
            ++a;
        ++s;
    }
    return a;
}

int main(void)
{
    char *s = "321abc1122"; // 9
    char *set = "123";
    int count = 0;

    while(*set)
    {
        count += f(s, *set);
        ++set;
    }
    printf("%i\n", count);

    return 0;
}deadman@gnomik:~$ gcc file.c 
deadman@gnomik:~$ ./a.out 
7
deadman@gnomik:~$
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
29.11.2011, 21:57 55
Thinker, мы говорим о символах в сферическом вакууме или символах char? Если про char, то можно предложить отсортировать строку set, и уже далее использовать бинарный поиск. Получится O(lg(n) * m).
C
1
2
3
4
for (p = s; *p; ++p) {
   if (bsearch(set, *p)) // найти символ 'p' в строке 'q'
      ++count;
}
А под конкретные данные (множества set) можно много чего придумать.
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 22:00 56
alkagolik, хорошо, спасибо, только сложность алгоритма O(mn).
fasked, о типе char. с бинарным поиском сложность алгоритма будет https://www.cyberforum.ru/cgi-bin/latex.cgi?O(n\cdot \log_2 m), уже лучше
0
Заблокирован
29.11.2011, 23:33 57
самообман. При расчете сложности не учитана сложность сортировки. Реально задача реализуется сравнением каждого байта массива s. Можно конечно (и нужно) оптимизировать под наиболее вероятные случаи, но сути это не меняет.
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
29.11.2011, 23:45 58
Цитата Сообщение от Thinker Посмотреть сообщение
уже лучше
Как вариант упаковывать все по 4 или 8 байт, что уменьшит сложность в 8 или 4 раза, но это опять же константа и брать ее во внимание неразумно.
Цитата Сообщение от alkagolik Посмотреть сообщение
При расчете сложности не учитана сложность сортировки.
Строка set очень коротка, поэтому сортировка пройдет почти незаметно. Впрочем, бинарный поиск по ней тоже не сильно будет отличаться от линейного.
0
Заблокирован
30.11.2011, 00:13 59
Цитата Сообщение от fasked Посмотреть сообщение
Как вариант упаковывать все по 4 или 8 байт
кодировать? можно немного подробней?
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
30.11.2011, 00:55 60
Цитата Сообщение от alkagolik Посмотреть сообщение
можно немного подробней?
В общем-то формировать из 4 символов один int. Потом как-нибудь хитро это "заксорить" с искомым символом и проверить на наличие нулей. Я думаю, что в strchr именно так и сделано, но разбираться, если честно, лень Это прибавит скорости машинной, но не алгоритмической. Поэтому неинтересно.
0
30.11.2011, 00:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2011, 00:55
Помогаю со студенческими работами здесь

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

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

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

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

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

Напечатать все слова, в которых повторяется первая буква слова
1)Задан текст.Напечатать все слова, в которых повторяется первая буква слова. 2)Задан текст....


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru