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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Cuda
0 / 0 / 0
Регистрация: 12.11.2011
Сообщений: 21
#1

Вывести на экран предложения, начинающиеся с однобуквенных слов - C++

07.03.2012, 21:59. Просмотров 1454. Ответов 9
Метки нет (Все метки)

Здравствуйте. Требуется из любого текста(строки s) вывести на экран сначала предложения, начинающиеся с однобуквенных слов, а затем все остальные предложения.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <string.h>
main()
{
    int i, n, count=0;
    char s[]="qwerty qwe. rqecx. y ooij, rq. r a fadf.";
    n=strlen(s);
    int b[n];
    for (i=0; i<n; i++)
    {
        if(s[i]=='.' && s[i+3]==' ')
        {
            b[count]=i;
            count++;
        }
    }
}
вот тут я начал решать-нашел индексы точек перед предложениями(которые начинаются с однобуквенных слов), а что дальше делать не знаю.

Добавлено через 13 минут
Текст состоит из нескольких предложений. В коде программы это просто пример текста.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2012, 21:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести на экран предложения, начинающиеся с однобуквенных слов (C++):

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

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

Из файла с текстом вывести в начале предложения, состоящие из однобуквенных слов - C++
Не получается создать условие проверки предложений

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

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

Cчитать текст из файла и вывести на экран предложения, начинающиеся с тире - C++
Помогите!!!!!!!! Жизненно важно!!!! НЕОБХОДИМА программа которая считывает текст из файла и выводит на экран предложения, начинающиеся...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
07.03.2012, 22:05 #2
Используй функцию strtok для поиска точек. Т.е. сначало пробегаешь от начала строки - находишь первую букву, запоминаешь ее место. Далее ищешь точку - запоминаешь ее место. Далее начиная с точки опять ищешь букву, запоминаешь место, потом ищешь следующую точку запоминаешь и т.к. В конце у тебя будут координаты начала и конца всех предложений. Проверяешь стоит ли после первого символа пробел, выводишь и ......
0
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
07.03.2012, 22:22 #3
Цитата Сообщение от darkknight2008 Посмотреть сообщение
Используй функцию strtok для поиска точек. Т.е. сначало пробегаешь от начала строки - находишь первую букву, запоминаешь ее место. Далее ищешь точку - запоминаешь ее место. Далее начиная с точки опять ищешь букву, запоминаешь место, потом ищешь следующую точку запоминаешь и т.к. В конце у тебя будут координаты начала и конца всех предложений. Проверяешь стоит ли после первого символа пробел, выводишь и ......
strtok модифицирует строку!! точки можно найти просто сравнивая с символом
0
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
07.03.2012, 22:39 #4
panicwassano, ну по идее это хорошо, что модифицирует. Тогда можно не запоминать конец предложения, нужно только начало.
0
Cuda
0 / 0 / 0
Регистрация: 12.11.2011
Сообщений: 21
08.03.2012, 22:26  [ТС] #5
ну а как мне тогда получить ту часть строки s которую надо вывести?

Добавлено через 2 часа 13 минут
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
#include <stdio.h>
#include <string.h>
main()
{
    int i, n, count=0, j,q;
    char s[]="Qwerty qwe. E qecx. Yooij, rq. R a fadf. Tfs f, ydgb. G gdf.";
    n=strlen(s);
    int b[n];
     if (s[1]==' ')
     {
        b[count]=0;
        count++;
     }
    for (i=0; i<n; i++)
    {
        if(s[i]=='.' && s[i+3]==' ')
        {
            b[count]=i+2;
            count++;
        }
    }
 
        for(i=0; i<count; i++)
        {
         for (j=b[i]; j<n; j++)
         {
        printf("%c",s[j]);
        if (s[j]=='.')
            break;
        }
        }
}
вот тут он мне выводит предложения которые начинаются с одного символа. а как вывести остальную часть исходной строки s?
0
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
09.03.2012, 00:30 #6
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
41
42
#include <cstdlib>
#include <iostream>
#define DELIMS "."
using namespace std;
 
int main()
{
    char mystr[256];
    char buf[256] = "H ello world.How do you do.Y es sir!!!.We want they now :)";
    
    strncpy(mystr, buf, strlen(buf) + 1);
 
    char *token = strtok(buf, DELIMS);
 
    while (token != 0)
    {
        int len = strlen(token);
        char *str = token;
        if(str[1] == ' ')
        {
            cout << str << '\n';
        }
 
        token = strtok(0, DELIMS);
    }
 
 
    token = strtok(mystr, DELIMS);
    while (token != 0)
    {
        int len = strlen(token);
        char *str = token;
        if(str[1] != ' ')
        {
            cout << str << '\n';
        }
 
        token = strtok(0, DELIMS);
    }
 
    return EXIT_SUCCESS;
}
Добавлено через 54 минуты
или так
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <cstdlib>
#include <iostream>
#define DELIMS "."
using namespace std;
 
int main()
{
    
    char buf[256] = "Hello world.How do you do. Y es sir!!!. W e want they now :)";
    int numbers[50];
 
    int count = 0;
    bool flag = false;
    for (int i = 0; i < strlen(buf); ++i)
    {
        int j = i;
        if (buf[j] == '.' && buf[++j] == ' ')
        {
            numbers[count] = ++j;
            ++count;
            flag = true;
        }
 
        if(!flag)
        {
            numbers[count] = i;
            ++count;
            flag = true;
        }
    }
 
    for (int i = 0; i < count; i++)
    {
        bool find = false;
        for (int j = numbers[i]; j < strlen(buf); ++j)
        {
 
            if (buf[j + 1] == ' ' && !find)
            {
                find = true;
            }
            
 
            if (buf[j] == '.' && buf[j+1] == ' ')
            {
                break;
            }
 
            if(!find)
            {
                break;
            }
            else
            {
                cout << buf[j];
            }
            
        }
        cout << '\n';
    }
 
    for (int i = 0; i < count; i++)
    {
        bool find = false;
        for (int j = numbers[i]; j < strlen(buf); ++j)
        {
 
            if (buf[j + 1] != ' ' && !find)
            {
                find = true;
            }
            
 
            if (buf[j] == '.' && buf[j+1] == ' ')
            {
                break;
            }
 
            if(!find)
            {
                break;
            }
            else
            {
                cout << buf[j];
            }
            
        }
        cout << '\n';
    }
 
    return EXIT_SUCCESS;
}
1
MickeyBlueEyes
Студент
120 / 131 / 12
Регистрация: 07.04.2011
Сообщений: 503
09.03.2012, 03:33 #7
так нада было?

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <stdio.h>
#include <string.h>
 
int strip(char s,char * del, int size){
    
    int i;
 
    for(i=0; i < size; i++){
         
         if(s == del[i]) return 1;
    
    }
 
    return 0;
 
    
 
}
 
void main(){
    
    int i, n = 0, y = 0, r = 5;
    
    char st[] = "Qwerty qwe. E qecx. Yooij, rq. R a fadf. Tfs t, ydgb. G gdf. qwerty qwe. rqecx. y ooij, rq. r a fadf.";    
 
    char del[] = {'.', ',', '/', ':', ';', '!'};  //Спец символы
 
    char finish[sizeof(st)]; 
    
    int size_del = sizeof(del);
 
    for(i=0; i < sizeof(st); i++){
        
         if((st[i + 1] == ' ' || strip(st[i + 1], del, size_del)) && (st[i - 1] == ' ' || strip(st[i - 1], del, size_del)) ){ 
 
              finish[n] = st[i];
 
              finish[n+=1] = '\n';
 
              n++;
 
              st[i] = ' ';  //Удаляем символ, заменив его на пробел
 
        } 
 
    }
 
  //Находим остальные слова
 
    for(i=0; i < sizeof(st); i++){
        
         if(st[i] != ' '){ 
 
              finish[n] = st[i];
 
              if(st[i + 1] == ' '){ 
                  finish[n += 1] = '\n';
                }
 
              n++;
 
         } 
 
    }
     
 printf("%s\n", finish);
 
 getchar();
 
}
2
Cuda
0 / 0 / 0
Регистрация: 12.11.2011
Сообщений: 21
09.03.2012, 11:42  [ТС] #8
всем спасибо)
сам разобрался)
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
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <string.h>
main()
{
    int i, n, count=0, j,q;
    char s[]="R efdss fsdf, dfsf. Qwerty qwe. Eqecx. Y ooij, rq. Ra fadf. Tfs f, ydgb. G gdf. Lrq.";
    n=strlen(s);
    int b[n];
     if (s[1]==' ')
     {
        b[count]=0;
        count++;
     }
    for (i=0; i<n; i++)
    {
        if(s[i]=='.' && s[i+3]==' ')
        {
            b[count]=i+2;
            count++;
        }
    }
 
        for(i=0; i<count; i++)
        {
         for (j=b[i]; j<n; j++)
         {
        printf("%c",s[j]);
        if (s[j]=='.')
            break;
        }
        }//конец
        for(i=0; i<count; i++)
        {
         for (j=b[i]; j<n; j++)
         {
        if (s[j]=='.')
        {
            s[j]='0';
            break;
        }
            s[j]='0';
        }
        }
       for (i=0; i<n; i++)
       {
        if(s[i]!='0')
       printf("%c", s[i]);
       }
}
0
Angpuxa
0 / 0 / 0
Регистрация: 05.11.2010
Сообщений: 73
10.04.2012, 20:29 #9
А можно скриншот до этой программы?
0
ВЕНЕРА
Сообщений: n/a
02.05.2012, 20:39 #10
можете переделать эту программу *Написать программу, которая считывает текст из файла и выводит на экран сначала предложения, начинающиеся с однобуквенных слов, а затем все остальные.* на языке С++
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2012, 20:39
Привет! Вот еще темы с ответами:

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

Считать текст из файла и вывести на экран только предложения начинающиеся с тире - C++
Дан преподавателем код программы для самостоятельного разбора. Помогите понять какая ошибка в 44 строке. #include &lt;iostream&gt; #include...

Считать текст из файла и вывести на экран только предложения, начинающиеся с введенного с клавиатуры слова - C++
Доброго времени суток! Помогите, пожалуйста, дописать код. Вот задание: Написать программу, которая, считывает текст из файла и выводит...

В строке, состоящей из слов, найти и вывести на экран все слова, начинающиеся на букву w - C++
В строке , состоящей из слов , найти и вывести на экран все слова , начинающиеся на букву w .


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.05.2012, 20:39
Ответ Создать тему
Опции темы

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