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

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

Войти
Регистрация
Восстановить пароль
 
Pomoshnik
5 / 5 / 0
Регистрация: 16.04.2013
Сообщений: 16
#1

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

09.05.2013, 01:53. Просмотров 638. Ответов 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;         
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2013, 01:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дан текстовый файл ( определить слово с наибольшим количеством букв и вставить его на начало и конец строки) (C++):

Дан текстовый файл f.Добавить в его конец символы e,n,d - C++
Дан текстовый файл f.Добавить в его конец символы e,n,d(если это необходимо,использовать дополнительный файл g) Помогите пожалуйста ...

Дан текстовый файл. Напечатать все его строки, в которых присутствует слово "кот" - C++
Дано текстовый файл.Напечатать все его рядки, в которых присутствует слово &quot;кот&quot; Мужики помогите за полчаса сделать! Годовая оценка...

Найти слово с наибольшим количеством гласных букв - C++
Гляньте что не так: #include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; using namespace std; void main(){ char...

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

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

Дан исходный текстовый файл. Записать его строки в выходной файл в перевёрнутом виде - C++
грозят отчислением, нужно решить

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
xtorne21st
интересующийся
304 / 275 / 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();
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2013, 13:01
Привет! Вот еще темы с ответами:

Вставить символы в начало и конец строки - C++
Дана строка символов. Сформируйте новую строку, начинающуюся с символа а (вводится с клавиатуры) и заканчивающуюся символом b (вводится с...

Дан одномерный целочисленный массив. Определить элемент с наибольшим количеством делителей - C++
Ребят, задача такая: &quot;Дан одномерный целочисленный массив. Определить элемент с наибольшим количеством делителей.&quot; Помогите плиз...

Дан текстовый файл F. Получить все его строки, содержащие более 60 символов. На С++ - C++
написал такой код, но он с ограничениями длина строки не больше 256, как сделать его универсальным? для строк любого размера #include...

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


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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