С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

29.11.2011, 17:37. Просмотров 4789. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2011, 17:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести все слова, в которых есть буква "a" (C++):

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

Удалить из текста все слова в которых буква "а" встречается более двух раз - C++
Все слова, в которых буква &quot;а&quot; встречается более 2-х раз, удалить из текста. Вывести полученную строку на экран, Если такой буквы нет,...

Написать программу,которая находит все слова,в которых буква "а" встречается больше чем один раз. - C++
Есть строка,которая состоит из слов,разделенных любым количеством промежутков.Написать программу,которая находит все слова,в которых буква...

Найти все слова, в которых есть двойные согласные, и заменить их символом "*" - C++
дан текст(на англ. яз). найти все слова, в которых есть двойные согласные и заменить их *.

Удалить столбцы символьной матрицы, в которых есть буква "А" - C++
И удалить все столбцы в которых есть буква &quot;А&quot;

Выяснить, есть ли в заданной строке слова, которые содержат все буквы слова "read" - C++
Помогите, пожалуйста, с кодом на с++. Задание было такое: Дано строку символов. Выяснить, есть ли в ней слова, которые содержат все...

69
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
29.11.2011, 17:50 #2
mister pOO, сначала strtok-ом разбиваем строку на слова, а потом проверяем наличие буквы в них
0
fasked
Эксперт С++
4952 / 2532 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.11.2011, 17:51 #3
http://liveworkspace.org/code/80e2f12375b6da38aa74d30bc2e541d1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <array>
 
int main() {
   std::array<std::string, 5> words = {
      "abra", "kfghfff", "erjha", "toejhnaerbna", "fuf"
   };
   
   for (const std::string &word : words) {
      size_t founded = word.find_first_of('a');
      if (founded != std::string::npos) {
         std::cout << word << std::endl;
      }
   }
   
   return 0;
}
http://liveworkspace.org/code/afd0c4be15f69ab788da06ba8db8fced
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <string.h>
 
#define NWORDS 5
 
int main() {
   size_t i = 0;  
   const char *ptr = NULL;
   const char *words[] = {
      "abra", "kfghfff", "erjha", "toejhnaerbna", "fuf"
   };
   
   for (i = 0; i < NWORDS; ++i) {
      if ((ptr = strchr(words[i], 'a')) != NULL) {
         printf("%s ", words[i]);
      }
   }
   
   return 0;
}
http://liveworkspace.org/code/57b60bff9ddca94f30b118efbada5473
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
25
26
#include <stdio.h>
#include <string.h>
 
#define NWORDS 5
 
int main() {
   size_t i = 0;  
   size_t j = 0;
   size_t len = 0;
 
   const char *words[] = {
      "abra", "kfghfff", "erjha", "toejhnaerbna", "fuf"
   };
   
   for (i = 0; i < NWORDS; ++i) {
      len = strlen(words[i]);
      for (j = 0; j < len; ++j) {
         if (words[i][j] == 'a') {
            printf("%s ", words[i]);
            break;
         }
      }
   }
   
   return 0;
}
0
alkagolik
Заблокирован
29.11.2011, 18:36 #4
Цитата Сообщение от Jupiter Посмотреть сообщение
mister pOO, сначала strtok-ом разбиваем строку на слова, а потом проверяем наличие буквы в них
как такая альтернатива?
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
25
26
27
28
29
30
31
#include <stdio.h>
#include <string.h>
 
int main(void)
{
    char *str = "how to use manpages in programming";
    char *p = str, *wrdbeg;
 
    puts(str);
    str = strchr(str, 'a');
 
    if (str)
    {
        while (str)
        {
            wrdbeg = str;
            while ( ( wrdbeg != p ) && ( *(wrdbeg - 1) != ' ') )
                --wrdbeg;
            while( ( *str != 0 ) && ( *(str + 1) != ' ') )
                ++str;
            while ( wrdbeg != str )
                putchar( *( wrdbeg++ ) );
            putchar('\n');
            str = strchr(str, 'a');
        }
    }
    else
        puts("symbol 'a' is not found");
 
    return 0;
}
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
29.11.2011, 18:52 #5
Цитата Сообщение от alkagolik Посмотреть сообщение
как такая альтернатива?
буквочку теряет http://codepad.org/Ys6pjkMx
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
29.11.2011, 18:55 #6
fasked, то разделение на слова нужно делать самому, а то сводите все к
C
1
2
if (strstr (words[i],"a") )
        printf ("\n%s", words[i]);
0
alkagolik
Заблокирован
29.11.2011, 18:56 #7
непорядок
0
Thinker
Эксперт С++
4229 / 2203 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 18:56 #8
fasked, функция strchr не очень быстрая и зависит от длины строки (первый параметр), функция strtok содержит внутри себя strchr, поэтому тоже не очень быстрая функция + портит строку. Но это вы сами прекрасно знаете, просто для тех, кому это интересно, реально писать без strchr и strtok свои функции в разы быстрее, при определенных раскладах и в десятки раз быстрее
0
alkagolik
Заблокирован
29.11.2011, 19:18 #9
Thinker, вполне разделяю, только боюсь что такая реализация вызовет сомнения.
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <string.h>
 
char *my_strchr(const char *s, char x)
{
    register char *c = s;
    while( (*c != x) && (*c != 0) )
        ++c;
 
    return ( *c == 0 ) ? 0 : c;
}
 
int main(void)
{
    char *str = "how to use manpages in programming";
    char *p = str, *wrdbeg;
 
    puts(str);
    str = my_strchr(str, 'a');
 
    if (str)
    {
        while (str)
        {
            wrdbeg = str;
            while ( ( wrdbeg != p ) && ( *(wrdbeg - 1) != ' ') )
                --wrdbeg;
            while( ( *str != 0 ) && ( *str != ' ') )
                ++str;
            while ( wrdbeg != str )
                putchar( *( wrdbeg++ ) );
            putchar('\n');
            str = my_strchr(str, 'a');
        }
    }
    else
        puts("symbol 'a' is not found");
 
    return 0;
}
0
Thinker
Эксперт С++
4229 / 2203 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 19:25 #10
alkagolik, вы пошли тем же путем, что и программисты, написавшие strchr. С учетом ассемблерных вставок, функция strchr будет работать раза в полтора быстрее вашей функции my_strchr.
0
alkagolik
Заблокирован
29.11.2011, 19:25 #11
вот только не разделяю что она зависит от длины строки.
0
Thinker
Эксперт С++
4229 / 2203 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 19:26 #12
Цитата Сообщение от alkagolik Посмотреть сообщение
вот только не разделяю что она зависит от длины строки.
Зависит, поверьте. Чем длиннее строка, тем в среднем больше проверок.
0
alkagolik
Заблокирован
29.11.2011, 19:28 #13
Thinker, нет, не тем же, реальная функция организована циклом с постусловем и проверкой в теле цикла. Асм это уже перебор мне кажется.

Добавлено через 41 секунду
Цитата Сообщение от Thinker Посмотреть сообщение
Зависит, поверьте. Чем длиннее строка, тем в среднем больше проверок.
именно этим моя реализация и отличается
0
Thinker
Эксперт С++
4229 / 2203 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 19:31 #14
Цитата Сообщение от alkagolik Посмотреть сообщение
Thinker, нет, не тем же, реальная функция организована циклом с постусловем и проверкой в теле цикла. Асм это уже перебор мне кажется.
Проверьте на скорость, если не верите. Если ваша функция хотя бы по времени столько же будет работать, то это уже хорошо.

Добавлено через 2 минуты
Цитата Сообщение от alkagolik Посмотреть сообщение
именно этим моя реализация и отличается
В смысле? ваша функция в среднем случае пробегает по строке s примерно strlen(s)/2. Функция strchr построена по такому же принципу.
0
alkagolik
Заблокирован
29.11.2011, 19:54 #15
Цитата Сообщение от Thinker Посмотреть сообщение
В смысле? ваша функция в среднем случае пробегает по строке s примерно strlen(s)/2
немного не понял, вы предлагаете за один проход найти сразу все символы? Насчет вставок асма не знаю как там они все согласованы с ОСапи и компиляторами разных версий, а в целом можно и так реализовать
C
1
2
3
4
5
6
7
8
9
10
char *my_strchr(s, x)
register char *s;
register char x;
{
 
    if ( *s )
        return (*s == x) ? s : my_strchr(s + 1, x);
    else
        return 0;
}
0
29.11.2011, 19:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2011, 19:54
Привет! Вот еще темы с ответами:

Есть ли в строке слова, которые содержат все буквы слова "read" - C++
Помогите пожалуйста с заданием на си. Дано строку символов. Выяснить, есть ли в ней слова, которые содержат все буквы слова &quot;read&quot;. Если...

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

Выдать строки, в которых есть слова с тремя буквами "у" - C++
Задача: Выдать строки, в которых есть слова с тремя буквами &quot;у&quot;. Уважаемые форумчане и прогеры высокого левела, помогите! Я сам не...

Ввести с клавиатуры строку, заменить в ней все буква "а" на букву "b" - C++
Здравствуйте) Вот возникла такая проблема.... не умею работать с указателями еще(( Помогите написать задачку: &quot;используя указатели,...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.