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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.84
morAlex
9 / 9 / 0
Регистрация: 06.01.2011
Сообщений: 73
#1

В файле заменить каждый символ первого наиболее короткого слова на «*» - C++

13.03.2011, 10:30. Просмотров 4179. Ответов 6
Метки нет (Все метки)

помогите пожайлуйста, только с доходчивым объяснением), Заранее огромное спасибо

В существующем на диске файле заменить каждый символ первого наиболее короткого слова на «*». (Считать, что слова разделены одним или несколькими пробелами или символами новой строки ‘\n’. Файл создать с помощью текстового редактора)
Вспомогательный файл не использовать.

ПОМОГИТЕ хотя бы самой идеей, пожайлуйста
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2011, 10:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В файле заменить каждый символ первого наиболее короткого слова на «*» (C++):

Наиболее часто встречающийся символ в текстовом файле - C++
считал символы из файла в строку, но не могу понять как найти наиболее часто встречающийся символ как в c++ проверить совпадение символа...

Каждый символ строки заменить на следующий за ним, а последний символ строки заменяеть первым - C++
я написал код но не могу разобраться. вот дано : ---------------------------------------------------------- В текстовом файле fin.txt...

Заменить каждый символ ';' на ',' - C++
вводим текст с клавиатуры нужно заменить каждый символ ';' на ',' и '.' в си . помогите написать!срочно нужно

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

Заменить каждый символ следующим по коду - C++
В заданной строке заменить каждый символ следующим по коду

Строки: заменить каждый символ '/' на пару символов ':' - C++
Подсчитать количество пар '23' и '45' по отдельности и заменить каждый символ '/' на пару символов ': '. С использование библиотеки...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
qwartzq
1 / 1 / 0
Регистрация: 12.03.2011
Сообщений: 27
13.03.2011, 12:41 #2
первого наиболее короткого
как я понял в строке??

Читаем файл построчно. Ищем наиболее короткое слово: считаем символы между пробелами
пример: dshgf we h fgr woieur e

ищем первый и второй пробел, и измеряем длину, если 2 пробела подряд, то длина 1.
длина 2 - значит 1 символ (h)
3 - значит 2 символа (we) и так далее
проверяем на ситуацию, когда 1 символ последний. (e)

Во время поиска первого пробела у нас будет указатель на него. пусть это ptr_sp
Тогда если условие выполнится, нам надо str1[prt_sp+1]='*'

функция для поиска strchr(str1,' '), вернет указатель на 1 вхождение пробела
0
morAlex
9 / 9 / 0
Регистрация: 06.01.2011
Сообщений: 73
13.03.2011, 15:29  [ТС] #3
а как узнать, что слово самое короткое и оно первое?
0
qwartzq
1 / 1 / 0
Регистрация: 12.03.2011
Сообщений: 27
13.03.2011, 16:02 #4
Можно при обработке файла завести переменную, которая будет хранить длину куска.
Если следующий кусок строго меньше текущего, то текущим становится следующий.

То есть ты проходишь строку, на выходе должен получить указатель на пробел перед самым коротким словом.
0
IrineK
Заблокирован
13.03.2011, 16:43 #5
Решение:
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
//чтение из файла
void fileDisplay(char* path)
{
    ifstream iFSTR;
    iFSTR.open(path);
    char buffer[80];
    if(iFSTR.is_open())
    {   while (iFSTR.good())
        {   iFSTR.getline(buffer,80,'\n');
                cout<<buffer<<"\n";
        }
        iFSTR.close();
    }
    else 
    {   cout<<"Error opening file\n";
        cin.get();
        exit(1);
    }
}
 
//поиск длины первого самого короткого слова
int shortest(char* path)
{   int N, min=100;
    string current, change="";
    ifstream iFSTR;
    iFSTR.open(path);
    if(iFSTR.is_open())
    {   while(iFSTR.good())
        {   iFSTR>>current; //считывание отдельных слов
            N = current.length();
            if (N < min) min = N;
        }
    iFSTR.close();
    return min;
    }
    else 
    {   cout<<"Error opening file\n";
        cin.get();
        exit(1);
    }
}
 
//замена слова на ** с записью в файл
void changeToStars(char* path, int minL)
{   long position;
    string current, change = "";
    for(int i = 0; i<minL;i++)
        change+="*"; //строка минимальной длины из **
    
    fstream FSTR;
    FSTR.open(path,fstream::in | fstream::out);
    if(FSTR.is_open())
    {   while(FSTR.good())
        {   FSTR>>current;//считывание отдельных слов
            if(current.length()==minL)
            {   position = FSTR.tellg();
                FSTR.seekp(position-minL);//возврат указателя на начало слова
                FSTR<<change;//замена на строку из **
                break;
            }
        }
    FSTR.close();
    }
    else
    {   cout<<"Error opening file\n";
        cin.get();
        exit(1);
    }
}
 
 
int main ()
{
    char* pathF = "test.txt";
    cout<<"Original file\n";
    cout<<"______________________________________________\n";
    fileDisplay(pathF);
    int found = shortest(pathF);
    changeToStars(pathF,found);
 
    cout<<"\n\nChanged file\n";
    cout<<"______________________________________________\n";
    fileDisplay(pathF);
 
    cin.get();  
    return 0;
}
0
easybudda
Модератор
Эксперт CЭксперт С++
9625 / 5573 / 947
Регистрация: 25.07.2009
Сообщений: 10,708
13.03.2011, 18:08 #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
#include <iostream>
#include <fstream>
#include <string>
#include <list>
#include <algorithm>
#include <iterator>
 
struct LenCmp {
    bool operator() (const std::string& a, const std::string& b){
        return a.size() < b.size();
    }
};
 
int main(){
    std::string buf;
    
    std::cout << "File name: ";
    std::cin >> buf;
    std::ifstream ifs(buf.c_str());
    if ( ! ifs.is_open() ){
        std::cerr << "Can't open file " << buf << " for input" << std::endl;
        return 1;
    }
    std::list<std::string> list;
    std::copy(std::istream_iterator<std::string>(ifs), std::istream_iterator<std::string>(), std::back_inserter(list));
    ifs.close();
    std::list<std::string>::iterator it = std::min_element(list.begin(), list.end(), LenCmp());
    int len = (*it).size();
    (*it).replace(0, len, len, '*');
    
    std::ofstream ofs(buf.c_str());
    if ( ! ofs.is_open() ){
        std::cerr << "Can't open file " << buf << " for output" << std::endl;
        return 1;
    }
    std::copy(list.begin(), list.end(), std::ostream_iterator<std::string>(ofs, " "));
    ofs.close();
    
    std::cerr << "Done." << std::endl;
    return 0;
}
0
morAlex
9 / 9 / 0
Регистрация: 06.01.2011
Сообщений: 73
14.03.2011, 21:41  [ТС] #7
Цитата Сообщение от qwartzq Посмотреть сообщение
Можно при обработке файла завести переменную, которая будет хранить длину куска.
Если следующий кусок строго меньше текущего, то текущим становится следующий.

То есть ты проходишь строку, на выходе должен получить указатель на пробел перед самым коротким словом.
Простите пожайлуйста, но ни могли бы вы показать мне эту часть цикла)
Благодарен
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2011, 21:41
Привет! Вот еще темы с ответами:

В строке символов заменить каждый второй символ s на f - C++
Подскажите,пожалуйста,как в строке символов заменить каждый второй символ s на f

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

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

Найти в строке string наиболее часто встречающуюся пару символов и заменить на один новый символ - C++
нужно найти в строке пару символов, которые повторяются чаще всех и заменить их на один новый символ например acfghhachfjiac &quot;ac&quot; заменить...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.03.2011, 21:41
Ответ Создать тему
Опции темы

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