Форум программистов, компьютерный форум 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
29.11.2011, 20:27     Вывести все слова, в которых есть буква "a" #21
Цитата Сообщение от go Посмотреть сообщение
то разделение на слова нужно делать самому
strtok + strchr + strdup тоже несложно сделать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 20:40     Вывести все слова, в которых есть буква "a" #22
fasked, функция strchr ОЧЕНЬ медленная для задач с большими строками, если от нее отказаться, то алгоритм в разы быстрее работает (в десятки раз). Ну да, strtok содержит strpbrk, какая разница, перепутал малость, все равно strtok медленная функция.

Но за алгоритмы реализаций спасибо
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
29.11.2011, 20:41     Вывести все слова, в которых есть буква "a" #23
Цитата Сообщение от Thinker Посмотреть сообщение
ОЧЕНЬ медленная для задач с большими строками
Медленная, если совпадений нет
Я просто не понимаю, как Вы по другому собираетесь искать совпадения символов?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 20:45     Вывести все слова, в которых есть буква "a" #24
Цитата Сообщение от fasked Посмотреть сообщение
Медленная, если совпадений нет
Есть совпадения, нет совпадений, в среднем медленная. Представьте ситуацию, есть строка set и строка s (тысячи, миллионы символов). Ваша цель - подсчитать количество символов строки s, входящих в строку set. Ваш алгоритм? Например, set = "abc", s="abcxyzabcxyzabc". Ответ 9.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
29.11.2011, 20:45     Вывести все слова, в которых есть буква "a" #25
непонятен смысл этой строки (47) strchr.
Цитата Сообщение от fasked Посмотреть сообщение
C
1
((unsigned long int) char_ptr & (sizeof (longword) - 1)) != 0;
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
29.11.2011, 20:54     Вывести все слова, в которых есть буква "a" #26
Цитата Сообщение от fasked Посмотреть сообщение
strtok + strchr + strdup тоже несложно сделать.
Это основа программы, а дальше цикл со вложенным их-ом, как я и продемонстрировал.
Ведь правда: хорошо, что можно все проинициализировать, а если вводить, например, gets-ом, то как получить такой же массив строк литералов? Правильно, никак
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
29.11.2011, 20:54     Вывести все слова, в которых есть буква "a" #27
Цитата Сообщение от Thinker Посмотреть сообщение
Ваша цель - подсчитать количество символов строки s, входящих в строку set. Ваш алгоритм? Например, set = "abc", s="abcxyzabcxyzabc". Ответ 9.
вы правы, но тут нужна просто иная функция, я абсолютно согласен что strchr для этой цели неумное решение. Она возвращает даже не символ, а указатель на символ, в то время как для вашей задачи требуется вернуть целое число. тут же очевино что надо пройти по строке и сосчитать количество совпадений.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 20:57     Вывести все слова, в которых есть буква "a" #28
alkagolik, почему иная, решение в лоб:

C
1
2
3
for (i = count = 0; s[i]; i++)
   if (strchr(set, s[i]))
      count++;
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
29.11.2011, 20:59     Вывести все слова, в которых есть буква "a" #29
Thinker, глупо отказываться от стандартных функций, мотивируя это долго продолжительностью выполнение. На практике ведь, это строки максимум с 10-15 слов, и писать ради них свою функции, и ради этого так "мудрить".
Ладно приведите аналог функции strchr, написанный Вами, который отработает быстрее?
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
29.11.2011, 21:00     Вывести все слова, в которых есть буква "a" #30
Цитата Сообщение от 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;
}
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:02     Вывести все слова, в которых есть буква "a" #31
Цитата Сообщение от go Посмотреть сообщение
Thinker, глупо отказываться от стандартных функций, мотивируя это долго продолжительностью выполнение. На практике ведь, это строки максимум с 10-15 слов
В реальных задачах, НИИ и т.д. гигабайты строк

Добавлено через 1 минуту
alkagolik, так подсчитает неправильно, нам же каждый символ нужно проверить строки s, принадлежит ли он строке set
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
29.11.2011, 21:05     Вывести все слова, в которых есть буква "a" #32
Цитата Сообщение от Thinker Посмотреть сообщение
В реальных задачах, НИИ и т.д. гигабайты строк
Вы меня не услышали
Цитата Сообщение от go Посмотреть сообщение
На практике ведь, это строки максимум с 10-15 слов, и писать ради них свою функции, и ради этого так "мудрить".
Добавлено через 26 секунд
Я говорю об авторе темы
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
29.11.2011, 21:05     Вывести все слова, в которых есть буква "a" #33
Цитата Сообщение от alkagolik Посмотреть сообщение
непонятен смысл этой строки (47) strchr.
Цикл хитрым образом смещает указатель так, чтобы потом можно было работать сразу по 4 или 8 байт.
Цитата Сообщение от Thinker Посмотреть сообщение
Представьте ситуацию, есть строка set и строка s (тысячи, миллионы символов).
Нет строки s. Есть один символ s.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
29.11.2011, 21:11     Вывести все слова, в которых есть буква "a" #34
Цитата Сообщение от Thinker Посмотреть сообщение
alkagolik, так подсчитает неправильно, нам же каждый символ нужно проверить строки s, принадлежит ли он строке set
подкорректировал
fasked
29.11.2011, 21:12
  #35

Не по теме:

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

alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
29.11.2011, 21:12     Вывести все слова, в которых есть буква "a" #36
Цитата Сообщение от fasked Посмотреть сообщение
Нет строки s. Есть один символ s
нету символа s, есть строка s и символ *s (это юмор )
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:14     Вывести все слова, в которых есть буква "a" #37
Цитата Сообщение от go Посмотреть сообщение
Я говорю об авторе темы
Про учебные задачи не спорю. я про большие объемы информации

Добавлено через 40 секунд
Цитата Сообщение от fasked Посмотреть сообщение
Нет строки s. Есть один символ s.
Ну, это нечестно так упрощать
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
29.11.2011, 21:16     Вывести все слова, в которых есть буква "a" #38
Цитата Сообщение от fasked Посмотреть сообщение
Цикл хитрым образом смещает указатель так, чтобы потом можно было работать сразу по 4 или 8 байт
вы наверное не туда посмотрели. strchr.c строка 47, условие выхода из цикла.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:17     Вывести все слова, в которых есть буква "a" #39
Цитата Сообщение от alkagolik Посмотреть сообщение
подкорректировал
Зачем так? Если символ s[i] совпал с одним из символов строки set, то дальше зачем поиски?

C
1
2
3
for (i = count = 0; s[i]; i++)
   if (strchr(set, s[i]))
      count++;
Не более
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2011, 21:21     Вывести все слова, в которых есть буква "a"
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
29.11.2011, 21:21     Вывести все слова, в которых есть буква "a" #40
Цитата Сообщение от Thinker Посмотреть сообщение
Ну, это нечестно так упрощать
Так мы же про strchr говорим, а она принимает символ для поиска, а не строку символов. Или я что-то опять пропустил в разговоре?
Цитата Сообщение от alkagolik Посмотреть сообщение
вы наверное не туда посмотрели. strchr.c строка 47, условие выхода из цикла.
Туда-туда.
C
1
((unsigned long int) char_ptr & (sizeof (longword) - 1)) != 0;
Указатель выравнивается так, чтобы было удобнее и быстрее работать по 4 или 8 байт за раз. Фактически проверяется кратность адреса.
Yandex
Объявления
29.11.2011, 21:21     Вывести все слова, в которых есть буква "a"
Ответ Создать тему
Опции темы

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