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

С++ Удалить в каждой строке последнее слово - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.84
medved89
 Аватар для medved89
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 3
29.06.2011, 03:50     С++ Удалить в каждой строке последнее слово #1
Выполнить обработку текстового файла. Определить кол-во предложений в исходном тексте.как реализовать ?Удалить в каждой строке последнее слово:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <fstream>
#include <iostream>
 
using namespace std;
int main(){
   ifstream fin("input.txt");
      int p = -1;
   while (!fin.eof()){
      char c;
      fin.get(c);
      if (c == '.') p++;
      if (c == '!') p++;
      if (c == '?') p++;
   }
   cout << p << std::endl;
   system("pause");
   return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OLLEGATOR
Linux-оид
 Аватар для OLLEGATOR
115 / 64 / 3
Регистрация: 15.02.2011
Сообщений: 353
29.06.2011, 03:57     С++ Удалить в каждой строке последнее слово #2
бей по токинам(strtok)...если токин последний то удаляй...я б так делал...
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
29.06.2011, 04:23     С++ Удалить в каждой строке последнее слово #3
Вот попробуй.

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
#include <stdio.h>
#include <ctype.h>
 
 
 
int   len_punct(const char* str) { 
       int len = 0;
       while( *str ) {
            if( *str == '.' || *str == '?' || *str == '!')
             len++;
          *str++;
      }
      return  len;
}
 
 
void   last_word_delete(char*  str, int size) {
       int  cnt = 0;
       for(int i = size - 1; i >= 0; i-- ) {
             if( isalpha( *((str) + i) ))
                     cnt++;
             else if(! isalpha( *((str) + i) )) {
              if(cnt > 1) {
                           *((str) + i) = '\0';
                                     break;
                      }
             }
        }
}
 
 
 
void  main(void) {
 
    int  count_pred = 0;
    FILE*  fp      = fopen("text.txt", "r" );
 
    char line[1024];
    while(! feof(fp)) { 
          line[0] = '\0';
          fgets(line, sizeof(line), fp);
          int  len = strlen(line);
          if(len > 0) {
               line[len - 1] = '\0';
               count_pred += len_punct(line);
               last_word_delete(line, len);
        puts(line);
          }
     }
    fclose(fp);
    printf("count pred: %d\n", count_pred);
 
   getchar();
}
medved89
 Аватар для medved89
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 3
29.06.2011, 04:45  [ТС]     С++ Удалить в каждой строке последнее слово #4
Цитата Сообщение от xAtom Посмотреть сообщение
int *len = strlen(line);
спс, но выбивает ошибку в 43 строке

Надо добавить в начале #include<cstring>


Тему клосс/ СПАСИБО xAtom, OLLEGATOR!
OLLEGATOR
Linux-оид
 Аватар для OLLEGATOR
115 / 64 / 3
Регистрация: 15.02.2011
Сообщений: 353
29.06.2011, 05:03     С++ Удалить в каждой строке последнее слово #5
int len = strlen(line); внимательнее
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
29.06.2011, 12:35     С++ Удалить в каждой строке последнее слово #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main() 
{
    char temp[100];
    char *p;
    std::ifstream ifs("1.txt");
 
    while (ifs.getline(temp,80)) {
        if (p=strrchr(temp,' ')) *p=0;
        puts(temp);
    }
 
 
    getchar();
    return 0;
}
без проверок на большое количество проверок. в стиле С.

Добавлено через 15 минут
пробелов*
Yandex
Объявления
29.06.2011, 12:35     С++ Удалить в каждой строке последнее слово
Ответ Создать тему
Опции темы

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