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

Как записать слово из файла в переменную - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
xym4uk
0 / 0 / 0
Регистрация: 25.06.2012
Сообщений: 26
26.06.2012, 01:12     Как записать слово из файла в переменную #1
дан файл с текстом. нужно все слова, начинающиеся и кончающиеся на гласные вывести на экран.
у меня текст английский, поэтому буквы английские.
как сделать, чтобы он проверял последнюю букву и при совпадении передавал слово, но при этом чтобы не реагировал на гласные внутри слов? мысль крутится, что надо считывать посимвольно до пробела, потом смотреть последнюю букву и если обе гласные - тогда записывать. в общем уже запутался. прошу помощи. если точнее - строки с 24 по 33.

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
#include <fstream.h>
#include <stdio.h>
#include <conio.h>
 
void main()
{
 clrscr();
 ifstream fin("c:\\lab6text.txt",ios::in|ios::nocreate);
 if (!fin) cout<<"can't open file"<<endl;
 
 fin.seekg(0,ios::end);     //ukazatel v konec faila
 long len=fin.tellg();      //zapomnit dlinu faila
 char *buf=new char [len+1];    //videlit pamyat pod bufer
 
 fin.seekg(0,ios::beg);     //ukazatel v na4alo faila
 fin.read(buf,len);     //copy LEN simvolov iz FIN v bufer
 buf[len]='\0';         //nol-litera v bufer
 
/*
 ofstream fout("c:\\out.txt",ios::out);
 if (!fout) cout<<"can't open output file"<<endl;
*/
 long k=0,n=0,i=0,j=0;
 while(buf[i])
 {
  if(buf[i]=='y'||buf[i]=='e'||buf[i]=='u'||buf[i]=='i'||buf[i]=='o'||buf[i]=='a')
  {n=i++;
   i++;
   for(j=n;j<=i;j++)
    cout<<buf[j];
 
  }
 else i++;
 
 
 
 }
 fin.close();
 cout<<endl;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
26.06.2012, 02:58     Как записать слово из файла в переменную #2
Когда считали файл в массив используйте STRTOK из <string.h> (разбивает строку на слова)

Вот так
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
#include <string.h>
#include <fstream.h>
#include <iostream.h>
#include <conio.h>
 
int vowels(char sym)
  {
        char* str = "aeuoyi";
        while(*str)
            if(*str++ == sym)
        return 1;
        return 0;
    }
 
int main()
{
 clrscr();
 ifstream fin("c:\\docblitz.txt");
 if (!fin) cout<<"can't open file"<<endl;
 
 fin.seekg(0,ios::end);     //ukazatel v konec faila
 long len=fin.tellg();      //zapomnit dlinu faila
 char *buf=new char [len+1];    //videlit pamyat pod bufer
 
 fin.seekg(0,ios::beg);     //ukazatel v na4alo faila
 fin.read(buf,len);     //copy LEN simvolov iz FIN v bufer
 buf[len]='\0';         //nol-litera v bufer
 
/*
 ofstream fout("c:\\out.txt",ios::out);
 if (!fout) cout<<"can't open output file"<<endl;
*/
char* word = NULL;
 
      word = strtok(buf," ,.[;](:)\t?!");
while(word)
{
      if( vowels(word[0]) && vowels(word[strlen(word) - 1]))
    {
      cout   << word <<  endl;
 
    }
      word = strtok(NULL," ,.[;](:)\t?!");
}
 
 fin.close();
 cout<<endl;
}
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
26.06.2012, 03:53     Как записать слово из файла в переменную #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
#include <vector>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <fstream>
#include <iterator>
#include <string>
 
typedef std::istream_iterator<char> Iterator;
typedef std::ostream_iterator<std::string> OIterator;
 
Iterator get_next_word (const Iterator& begin, const Iterator& end, std::string& word) {
  Iterator ib, ie;
  word.clear();
  for (ib = begin ; ib != end && !isalpha(*ib) ; ++ib);
  for (ie = ib ; ie != end && isalpha(*ie) ; word.push_back(*ie), ++ie);
  return ie;
}
 
bool is_vowel_symbol (const char symbol) {
  static char vowel_sym [] = { 'a', 'e', 'i', 'o', 'u', 'y' };
  const size_t size = sizeof(vowel_sym)/sizeof(vowel_sym[0]); 
  return std::find(vowel_sym, vowel_sym + size, symbol) != vowel_sym + size;
}
 
void add_word (const std::string& word, std::vector<std::string>& dict) {
  if (is_vowel_symbol(word[0]) && 
      is_vowel_symbol(word[word.length() ? word.length() - 1 : 0]) &&
      std::find(dict.begin(), dict.end(), word) == dict.end()) 
  {
    dict.push_back(word);
  }
}
 
int main(int, char* argv[]) {
  std::ifstream f("1.cpp");
  Iterator ib(f), ie;
  std::vector<std::string> dict;
  std::string word;
  
  for ( ; ib != ie ; ) {
     ib = get_next_word(ib, ie, word);
     add_word(word, dict);
  }
  
  std::copy(dict.begin(), dict.end(), OIterator(std::cout, "\n"));
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2012, 06:26     Как записать слово из файла в переменную #4
Можно так:
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
#include <iostream>
#include <cctype>  // для tolower() и isspace().
using namespace std;
 
int main()
{
    char buf[] = "  Qw  Ertyu\n\nio p[] asdfghjo kl;'/.,mnbv Ocxza  ";
    
    for (int i = 0; i < strlen(buf); i++) // перебор символов в buf.
    {
        while (isspace(buf[i])) i++; // пропускаем пробелы
        char t = tolower(buf[i]); // верхний регистр приводим к нижнему (для упрощения записи if).
        if(t == 'y'|| t == 'e' || t == 'u' || t == 'i' || t == 'o'|| t == 'a') // если гласная, то заходим.
        {
            char temp[50]; // массив для слова
            int j;
            for (j = 0; !isspace(buf[i]) && i < strlen(buf); j++, i++) // записываем символы в temp из buf до пробела 
                                                                       // или до конца buf, если слово последнее.
            {
                temp[j] = buf[i];
            }
            i--; // индекс последнего символа слова.
            t = tolower(buf[i]); // верхний регистр приводим к нижнему (для упрощения записи if).
            if(t == 'y'|| t == 'e' || t == 'u' || t == 'i' || t == 'o'|| t == 'a') // если и последний символ гласная, то заходим.
            {
                for ( int i = 0; i < j; i++) // печатаем слово из temp.
                        cout << temp[i];
                        cout << endl;
            }
        }
        else while (!isspace(buf[i]) && i < strlen(buf)) i++; // если не гласная, то перемещаемся до следующего пробела
                                                              // или до конца buf, если слово последее.
    }
    system("pause");
    return 0;
}
Yandex
Объявления
26.06.2012, 06:26     Как записать слово из файла в переменную
Ответ Создать тему
Опции темы

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