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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Cuda
0 / 0 / 0
Регистрация: 12.11.2011
Сообщений: 21
07.03.2012, 21:59     Вывести на экран предложения, начинающиеся с однобуквенных слов #1
Здравствуйте. Требуется из любого текста(строки 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 минут
Текст состоит из нескольких предложений. В коде программы это просто пример текста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2012, 21:59     Вывести на экран предложения, начинающиеся с однобуквенных слов
Посмотрите здесь:

Вывести на экран слова начинающиеся с той же буквы, что и первое слово предложения. Напечатать строку после изъятия этих слов. C++
C++ Cчитать текст из файла и вывести на экран предложения, начинающиеся с тире
C++ Написать программу, которая считывает текст из файла и выводит на экран сначала предложения, начинающиеся с однобуквенных слов, а затем все остальные
C++ Вывести на экран из текста только предложения, состоящие из заданного количества слов
C++ Строка: Вывести на экран только предложения, состоящие из заданного количества слов.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
07.03.2012, 22:05     Вывести на экран предложения, начинающиеся с однобуквенных слов #2
Используй функцию strtok для поиска точек. Т.е. сначало пробегаешь от начала строки - находишь первую букву, запоминаешь ее место. Далее ищешь точку - запоминаешь ее место. Далее начиная с точки опять ищешь букву, запоминаешь место, потом ищешь следующую точку запоминаешь и т.к. В конце у тебя будут координаты начала и конца всех предложений. Проверяешь стоит ли после первого символа пробел, выводишь и ......
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
07.03.2012, 22:22     Вывести на экран предложения, начинающиеся с однобуквенных слов #3
Цитата Сообщение от darkknight2008 Посмотреть сообщение
Используй функцию strtok для поиска точек. Т.е. сначало пробегаешь от начала строки - находишь первую букву, запоминаешь ее место. Далее ищешь точку - запоминаешь ее место. Далее начиная с точки опять ищешь букву, запоминаешь место, потом ищешь следующую точку запоминаешь и т.к. В конце у тебя будут координаты начала и конца всех предложений. Проверяешь стоит ли после первого символа пробел, выводишь и ......
strtok модифицирует строку!! точки можно найти просто сравнивая с символом
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
07.03.2012, 22:39     Вывести на экран предложения, начинающиеся с однобуквенных слов #4
panicwassano, ну по идее это хорошо, что модифицирует. Тогда можно не запоминать конец предложения, нужно только начало.
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?
panicwassano
590 / 558 / 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;
}
MickeyBlueEyes
Студент
 Аватар для 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();
 
}
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]);
       }
}
Angpuxa
0 / 0 / 0
Регистрация: 05.11.2010
Сообщений: 73
10.04.2012, 20:29     Вывести на экран предложения, начинающиеся с однобуквенных слов #9
А можно скриншот до этой программы?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2012, 20:39     Вывести на экран предложения, начинающиеся с однобуквенных слов
Еще ссылки по теме:

Считать текст из файла и вывести на экран только предложения начинающиеся с тире C++
В строке, состоящей из слов, найти и вывести на экран все слова, начинающиеся на букву w C++
C++ Считать текст из файла и вывести на экран только предложения, начинающиеся с тире

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

Или воспользуйтесь поиском по форуму:
ВЕНЕРА
Сообщений: n/a
02.05.2012, 20:39     Вывести на экран предложения, начинающиеся с однобуквенных слов #10
можете переделать эту программу *Написать программу, которая считывает текст из файла и выводит на экран сначала предложения, начинающиеся с однобуквенных слов, а затем все остальные.* на языке С++
Yandex
Объявления
02.05.2012, 20:39     Вывести на экран предложения, начинающиеся с однобуквенных слов
Ответ Создать тему
Опции темы

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