Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.97
mister pOO
1 / 1 / 0
Регистрация: 26.11.2011
Сообщений: 33
29.11.2011, 17:37     Вывести все слова, в которых есть буква "a" #1
не могу найти ошибку
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 минут
помогите пожалуйста...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2011, 17:37     Вывести все слова, в которых есть буква "a"
Посмотрите здесь:

Найти все и вывести все слова в которых есть буква "к" C++
C++ Написать программу,которая находит все слова,в которых буква "а" встречается больше чем один раз.
Вывести текст файла, заменив цифры от 0 до 9 на слова "ноль", "один"."девять", начиная каждое предложение с новой строки C++
Выдать строки, в которых есть слова с тремя буквами "у" C++
Вывести слова из предложения, в которых есть буква, встречающийся четыре и более раз C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:23     Вывести все слова, в которых есть буква "a" #41
Цитата Сообщение от fasked Посмотреть сообщение
Так мы же про strchr говорим, а она принимает символ для поиска, а не строку символов.
fasked, хорошо, по-другому, в посте 39 приведен пример использования strchr, но пример как не эффективно использовать эту функцию. Вы же не привели свой алгоритм решения задачи с set и s
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
29.11.2011, 21:34     Вывести все слова, в которых есть буква "a" #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]);
}
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
29.11.2011, 21:35     Вывести все слова, в которых есть буква "a" #43
Цитата Сообщение от Thinker Посмотреть сообщение
хорошо, по-другому, в посте 39 приведен пример использования strchr, но пример как не эффективно использовать эту функцию.
Ну по-началу пошел бы по пути наименьшего сопротивления:
C
1
2
3
4
5
for (p = set; *p; ++p) {
   for (q = s; *q; ++q) {
      if (*q == *p) ++count;
   }
}
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:38     Вывести все слова, в которых есть буква "a" #44
alkagolik, моя вина, что не сказал, что set - множество символов, то есть там нет одинаковых символов.

Добавлено через 1 минуту
fasked, сложность вашего алгоритма O(mn), где m = strlen(set), n = strlen(s)
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
29.11.2011, 21:38     Вывести все слова, в которых есть буква "a" #45
Цитата Сообщение от Thinker Посмотреть сообщение
alkagolik, моя вина, что не сказал, что set - множество символов, то есть там нет одинаковых символов.
так это же ничего не меняет. вы наверное запутались.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
29.11.2011, 21:39     Вывести все слова, в которых есть буква "a" #46
Цитата Сообщение от Thinker Посмотреть сообщение
моя вина, что не сказал, что set - множество символов, то есть там нет одинаковых символов.
Давайте-ка точнее set - без повторовю А найти надо что? Общее количество совпадений? Или просто определить встречается ли каждый из символов в строке хотя бы один раз?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:40     Вывести все слова, в которых есть буква "a" #47
Цитата Сообщение от alkagolik Посмотреть сообщение
так это же ничего не меняет. вы наверное запутались.
Если символ c входит в строку set, то другого такого же символа c в set уже нет, я об этом
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
29.11.2011, 21:41     Вывести все слова, в которых есть буква "a" #48
ну видимо я запутался
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:42     Вывести все слова, в которых есть буква "a" #49
Цитата Сообщение от fasked Посмотреть сообщение
Давайте-ка точнее set - без повторовю А найти надо что? Общее количество совпадений? Или просто определить встречается ли каждый из символов в строке хотя бы один раз?
set это строка без повторяющихся символов, s - произвольная строка. Требуется подсчитать количество символов из строки s, содержащихся в set. Например, set = "123". s = "321abc11". Ответ 5
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
29.11.2011, 21:45     Вывести все слова, в которых есть буква "a" #50
Цитата Сообщение от Thinker Посмотреть сообщение
Ваша цель - подсчитать количество символов строки s, входящих в строку set.
или все таки вы?

Добавлено через 2 минуты
Thinker, решение ссылка + ссылка = решение
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:47     Вывести все слова, в которых есть буква "a" #51
Цитата Сообщение от alkagolik Посмотреть сообщение
или все таки вы?
Нет, я же придумал задачу У нас вопрос не сколько различных символов из s принадлежит set (это другая задача, тоже интересная), а сколько в строке s символов, которые принадлежат set, например, усли set="01...9", то мы считаем количество цифр в строке и т.д.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
29.11.2011, 21:48     Вывести все слова, в которых есть буква "a" #52
Цитата Сообщение от Thinker Посмотреть сообщение
а сколько в строке s символов, которые принадлежат set, например, усли set="01...9", то мы считаем количество цифр в строке и т.д.
так я вам уже несколько раз показал решение и конечно strchr тут неуместно.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:52     Вывести все слова, в которых есть буква "a" #53
Цитата Сообщение от alkagolik Посмотреть сообщение
так я вам уже несколько раз показал решение и конечно strchr тут неуместно.
Хорошо, ваш алгоритм к строкам set = "123", s = "321abc1122" какой ответ дает?
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
29.11.2011, 21:57     Вывести все слова, в которых есть буква "a" #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:~$
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
29.11.2011, 21:57     Вывести все слова, в которых есть буква "a" #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) можно много чего придумать.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 22:00     Вывести все слова, в которых есть буква "a" #56
alkagolik, хорошо, спасибо, только сложность алгоритма O(mn).
fasked, о типе char. с бинарным поиском сложность алгоритма будет http://www.cyberforum.ru/cgi-bin/latex.cgi?O(n\cdot \log_2 m), уже лучше
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
29.11.2011, 23:33     Вывести все слова, в которых есть буква "a" #57
самообман. При расчете сложности не учитана сложность сортировки. Реально задача реализуется сравнением каждого байта массива s. Можно конечно (и нужно) оптимизировать под наиболее вероятные случаи, но сути это не меняет.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
29.11.2011, 23:45     Вывести все слова, в которых есть буква "a" #58
Цитата Сообщение от Thinker Посмотреть сообщение
уже лучше
Как вариант упаковывать все по 4 или 8 байт, что уменьшит сложность в 8 или 4 раза, но это опять же константа и брать ее во внимание неразумно.
Цитата Сообщение от alkagolik Посмотреть сообщение
При расчете сложности не учитана сложность сортировки.
Строка set очень коротка, поэтому сортировка пройдет почти незаметно. Впрочем, бинарный поиск по ней тоже не сильно будет отличаться от линейного.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
30.11.2011, 00:13     Вывести все слова, в которых есть буква "a" #59
Цитата Сообщение от fasked Посмотреть сообщение
Как вариант упаковывать все по 4 или 8 байт
кодировать? можно немного подробней?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2011, 00:55     Вывести все слова, в которых есть буква "a"
Еще ссылки по теме:

C++ Вывести все значения n, при которых все числа заданной последовательности будут не меньше "a"
Есть ли в строке слова, которые содержат все буквы слова "read" C++
C++ Выяснить, есть ли в заданной строке слова, которые содержат все буквы слова "read"

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

Или воспользуйтесь поиском по форуму:
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
30.11.2011, 00:55     Вывести все слова, в которых есть буква "a" #60
Цитата Сообщение от alkagolik Посмотреть сообщение
можно немного подробней?
В общем-то формировать из 4 символов один int. Потом как-нибудь хитро это "заксорить" с искомым символом и проверить на наличие нулей. Я думаю, что в strchr именно так и сделано, но разбираться, если честно, лень Это прибавит скорости машинной, но не алгоритмической. Поэтому неинтересно.
Yandex
Объявления
30.11.2011, 00:55     Вывести все слова, в которых есть буква "a"
Ответ Создать тему
Опции темы

Текущее время: 07:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru