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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.97
mister pOO
1 / 1 / 0
Регистрация: 26.11.2011
Сообщений: 33
#1

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

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

Найти все и вывести все слова в которых есть буква "к" C++
C++ Ввести с клавиатуры строку, заменить в ней все буква "а" на букву "b"
C++ Написать программу,которая находит все слова,в которых буква "а" встречается больше чем один раз.
Если в строке есть хоть один ноль - вывести в файл output.txt "YES", иначе вывести "NO"; C++
Выдать строки, в которых есть слова с тремя буквами "у" C++
Что здесь неправильно? (Вывести все слова строки в которых первая буква входит в него ещё раз) C++
Вывести слова из предложения, в которых есть буква, встречающийся четыре и более раз C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.11.2011, 20:27     Вывести все слова, в которых есть буква "a" #21
Цитата Сообщение от go Посмотреть сообщение
то разделение на слова нужно делать самому
strtok + strchr + strdup тоже несложно сделать.
Thinker
Эксперт C++
4220 / 2194 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 20:40     Вывести все слова, в которых есть буква "a" #22
fasked, функция strchr ОЧЕНЬ медленная для задач с большими строками, если от нее отказаться, то алгоритм в разы быстрее работает (в десятки раз). Ну да, strtok содержит strpbrk, какая разница, перепутал малость, все равно strtok медленная функция.

Но за алгоритмы реализаций спасибо
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.11.2011, 20:41     Вывести все слова, в которых есть буква "a" #23
Цитата Сообщение от Thinker Посмотреть сообщение
ОЧЕНЬ медленная для задач с большими строками
Медленная, если совпадений нет
Я просто не понимаю, как Вы по другому собираетесь искать совпадения символов?
Thinker
Эксперт C++
4220 / 2194 / 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
Заблокирован
29.11.2011, 20:45     Вывести все слова, в которых есть буква "a" #25
непонятен смысл этой строки (47) strchr.
Цитата Сообщение от fasked Посмотреть сообщение
C
1
((unsigned long int) char_ptr & (sizeof (longword) - 1)) != 0;
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
29.11.2011, 20:54     Вывести все слова, в которых есть буква "a" #26
Цитата Сообщение от fasked Посмотреть сообщение
strtok + strchr + strdup тоже несложно сделать.
Это основа программы, а дальше цикл со вложенным их-ом, как я и продемонстрировал.
Ведь правда: хорошо, что можно все проинициализировать, а если вводить, например, gets-ом, то как получить такой же массив строк литералов? Правильно, никак
alkagolik
Заблокирован
29.11.2011, 20:54     Вывести все слова, в которых есть буква "a" #27
Цитата Сообщение от Thinker Посмотреть сообщение
Ваша цель - подсчитать количество символов строки s, входящих в строку set. Ваш алгоритм? Например, set = "abc", s="abcxyzabcxyzabc". Ответ 9.
вы правы, но тут нужна просто иная функция, я абсолютно согласен что strchr для этой цели неумное решение. Она возвращает даже не символ, а указатель на символ, в то время как для вашей задачи требуется вернуть целое число. тут же очевино что надо пройти по строке и сосчитать количество совпадений.
Thinker
Эксперт C++
4220 / 2194 / 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++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
29.11.2011, 20:59     Вывести все слова, в которых есть буква "a" #29
Thinker, глупо отказываться от стандартных функций, мотивируя это долго продолжительностью выполнение. На практике ведь, это строки максимум с 10-15 слов, и писать ради них свою функции, и ради этого так "мудрить".
Ладно приведите аналог функции strchr, написанный Вами, который отработает быстрее?
alkagolik
Заблокирован
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++
4220 / 2194 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 21:02     Вывести все слова, в которых есть буква "a" #31
Цитата Сообщение от go Посмотреть сообщение
Thinker, глупо отказываться от стандартных функций, мотивируя это долго продолжительностью выполнение. На практике ведь, это строки максимум с 10-15 слов
В реальных задачах, НИИ и т.д. гигабайты строк

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

Не по теме:

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

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

Добавлено через 40 секунд
Цитата Сообщение от fasked Посмотреть сообщение
Нет строки s. Есть один символ s.
Ну, это нечестно так упрощать
alkagolik
Заблокирован
29.11.2011, 21:16     Вывести все слова, в которых есть буква "a" #38
Цитата Сообщение от fasked Посмотреть сообщение
Цикл хитрым образом смещает указатель так, чтобы потом можно было работать сразу по 4 или 8 байт
вы наверное не туда посмотрели. strchr.c строка 47, условие выхода из цикла.
Thinker
Эксперт C++
4220 / 2194 / 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++ Проверить, встрачается ли в заданном тексте буква "а" чаще, чем буква "b"
C++ Вывести все значения n, при которых все числа заданной последовательности будут не меньше "a"
Есть ли в строке слова, которые содержат все буквы слова "read" C++
C++ Выяснить, есть ли в заданной строке слова, которые содержат все буквы слова "read"
Удалить из текста все слова в которых буква "а" встречается более двух раз C++

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

Или воспользуйтесь поиском по форуму:
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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"
Ответ Создать тему
Опции темы

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