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

Дан текстовый файл ( определить слово с наибольшим количеством букв и вставить его на начало и конец строки) - C++

Восстановить пароль Регистрация
 
Pomoshnik
5 / 5 / 0
Регистрация: 16.04.2013
Сообщений: 16
09.05.2013, 01:53     Дан текстовый файл ( определить слово с наибольшим количеством букв и вставить его на начало и конец строки) #1
Дан текстовый файл определить слово с наибольшим количеством букв и вставить его на начало и конец строки.
Вот мой код
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
#include <iostream>
#include <stdio.h>
char* pidrahui(char*,int);
using namespace std;
 
int main()
{
    FILE* f;
    FILE* f1;
    f=fopen("1.txt","r");
    f1=fopen("2.txt","w");
    char *s=new char[500];
    if(f != NULL && f1 != NULL)
        {
            bool j = true;
            while(j)
                {
                    fgets(s,500,f);
                    if(feof(f))
                        j = false;
                    s = pidrahui(s,strlen(s));
                    fputs(s,f1);
                    fputs("\n",f1);
                }
            fclose(f);
            fclose(f1);
        }
    system("pause");
}
 
 
char* pidrahui(char* s,int n)
{ 
     int k=0,z=0,count,count1;
bool b=true,b1=false;
      for(int i=0;i<n;i++)
    if(isspace(s[i])&&!isspace(s[i+1]))
     k++;
    int * m=new int[k+1];
      for(int i=0;i<n;i++)
        if(isspace(s[i])&&!isspace(s[i+1]))
          m[z++]=i;
          m[z]=n;
        int *m1 = new int [z+1];
        m1[0]=m[0];
        int max=m1[0];
          for(int i = 1;i<=z+1;i++)
               {m1[i]=m[i]-m[i-1]-1;
                     if(m1[i]>max)
                     {max=m1[i];
                      count = m[i];
                      count1 = m[i-1];
                      }
                      }
                      if(m1[0]==max)
                       {
                         count = m[0];
                         count1 = 0;
                         }
                   
                    char* s1 = new char [n+count - count1+1];
                    int o=0,p=1;
                    s1[1] = s1[strlen(s1)];
                     char* s2 = new char [n+count - count1+1];
                     s2[0]=' ';
                     s2[1] = s2[strlen(s2)];
                   
                     for(int i = count1+1-(bool)(count1==0);i<count;i++)
                      {s1[o++]=s[i];
                       s2[p++]=s1[o-1]; 
          
                      } 
                        s1[o]=' ';
                        s1[o+1] = s1[strlen(s1)];
                        s2[o+1] = s2[strlen(s2)];
                        s[strlen(s)-1] = s[strlen(s)];
                        strcat(s1,s);
                        strcat(s1,s2);    
                 return s1;         
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2013, 01:53     Дан текстовый файл ( определить слово с наибольшим количеством букв и вставить его на начало и конец строки)
Посмотрите здесь:

Дан текстовый файл f.Добавить в его конец символы e,n,d C++
Дан текстовый файл F. Получить все его строки, содержащие более 60 символов. На С++ C++
C++ Дан исходный текстовый файл. Записать его строки в выходной файл в перевёрнутом виде
C++ Дан текстовый файл. Напечатать все его строки, в которых присутствует слово "кот"
C++ Найти слово с наибольшим количеством гласных букв
C++ Вывести на экран слово с наибольшим количеством гласных букв
Дан одномерный целочисленный массив. Определить элемент с наибольшим количеством делителей C++
C++ Дана строка S и текстовый файл. Добавить строку S в начало и конец файла

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
09.05.2013, 13:01     Дан текстовый файл ( определить слово с наибольшим количеством букв и вставить его на начало и конец строки) #2
Конечно, название вашей функции порадовало.
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 <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <iterator>
 
typedef std::istream_iterator<std::string> ii;
 
int main()
{
    std::string line;
 
    std::getline(std::cin, line);
 
    std::stringstream str(line);
    std::vector<std::string> v((ii(str)), ii());
 
    std::vector<std::string>::const_iterator max_word = v.begin();
    for (std::vector<std::string>::const_iterator curr_word = v.begin() + 1; curr_word != v.end(); ++curr_word )
    {
        if (max_word->size() < curr_word->size())
        {
            max_word = curr_word;
        }
    }
    std::string new_word = *max_word;
    new_word += ' ';
    new_word += line;
    new_word += ' ';
    new_word += *max_word;
    std::cout << new_word << std::endl;
}
Добавлено через 19 минут
Не заметил, что нужны файлы:
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
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <iterator>
 
typedef std::istream_iterator<std::string> ii;
 
int main()
{
    std::string file_in, file_out;
    std::cout << "Input: ";
    std::cin >> file_in;
    std::cout << "Output: ";
    std::cin >> file_out;
 
 
    std::ifstream in(file_in.c_str(), std::ios::in);
    std::ofstream out(file_out.c_str(), std::ios::out);
    if (!in || !out)
    {
        std::cerr << "couldn't open file(s) " << std::endl;
        return 1;
    }
 
    std::string line;
    while (std::getline(in, line))
    {
        if (line.size() > 0)
        {
            std::stringstream str(line);
            std::vector<std::string> v((ii(str)), ii());
 
            std::vector<std::string>::const_iterator max_word = v.begin();
            for (std::vector<std::string>::const_iterator curr_word = v.begin() + 1; curr_word != v.end(); ++curr_word )
            {
                if (max_word->size() < curr_word->size())
                {
                    max_word = curr_word;
                }
            }
            std::string new_word = *max_word;
            new_word += ' ';
            new_word += line;
            new_word += ' ';
            new_word += *max_word;
            out << new_word << std::endl;
        }
        else
        {
            out << "\n";
        }
    }
 
    in.close(); out.close();
}
Добавлено через 9 часов 44 минуты
ещё как вариант с аргументами из командной строки:
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
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <iterator>
#include <algorithm>
 
bool cmp(const std::string& left, const std::string& right)
{
    return left.size() < right.size();
}
 
typedef std::istream_iterator<std::string> ii;
 
int main(int argc, const char* argv[])
{
    std::ifstream in(argv[1], std::ios::in);
    std::ofstream out(argv[2], std::ios::out);
    if (!in || !out)
    {
        std::cerr << "couldn't open file(s) " << std::endl;
        return 1;
    }
 
    std::string line;
    while (std::getline(in, line))
    {
        if (line.size() > 0)
        {
            std::stringstream str(line);
            std::vector<std::string> v((ii(str)), ii());
 
            std::vector<std::string>::const_iterator max_word
                = std::max_element(v.begin(), v.end(), cmp);
 
            std::string new_word = *max_word;
            new_word += ' ';
            new_word += line;
            new_word += ' ';
            new_word += *max_word;
            out << new_word << std::endl;
        }
        else
        {
            out << "\n";
        }
    }
 
    in.close(); out.close();
}
Yandex
Объявления
09.05.2013, 13:01     Дан текстовый файл ( определить слово с наибольшим количеством букв и вставить его на начало и конец строки)
Ответ Создать тему
Опции темы

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