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

В строке заменить все двоеточия точкой с запятой и посчитать количество замен - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
mascha2010
0 / 0 / 0
Регистрация: 23.04.2013
Сообщений: 5
17.09.2013, 20:55     В строке заменить все двоеточия точкой с запятой и посчитать количество замен #1
В строке заменить все двоеточия ( точкой с запятой ( и посчитать количество замен.
 Комментарий модератора 
Перенесено из раздела Turbo Pascal
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2013, 20:55     В строке заменить все двоеточия точкой с запятой и посчитать количество замен
Посмотрите здесь:

C++ Как на языке "С" удалить в строке все цифры 3 перед первой точкой и заменить все '+' после певрой точки на '-'?
C++ Заменить все ее члены, большие данного Z, этим числом. Подсчитать количество замен.
Посчитать количество слов в строке, оканчивающейся точкой. C++
C++ Заменить все пробелы на запятые, а запятые на точки. Посчитать количество запятых во введенной строке
C++ В строке заменить все запятые на точки.Подсчитать кол-во замен!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
17.09.2013, 21:39     В строке заменить все двоеточия точкой с запятой и посчитать количество замен #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main()
{
    char msg[] = "qwer: tyui: op: asdf: ghjk: l: zxcv: bnm:";
 
    for (int i=0; msg[i]; i++)
        if (msg[i]==':')
            msg[i]=';';
 
    return 0;
}
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
17.09.2013, 21:51     В строке заменить все двоеточия точкой с запятой и посчитать количество замен #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
#include <iostream>
#include <algorithm>
#include <functional>
 
int main()
{
    std::string sourceString("Tex:t w::i:th ::: something:");
    std::string newString(sourceString);
    size_t replacingCnt = size_t();
 
    //Лямбда чекер двоеточий
    std::function<bool(const char)> counter = [](const char ch) -> bool {
        if(ch == ':')
            return true;
        return false;
    };
 
    //Считаем количество ':'
    replacingCnt = std::count_if(sourceString.begin(), sourceString.end(), counter);
 
    //Делаем фактическую замену
    std::replace(newString.begin(), newString.end(), ':', ';');
 
    //Выводим результаты
    std::cout<<"Source string: " <<sourceString <<'\n'
       <<"String after replacing: " <<newString <<'\n'
      <<"Number of replacings: " <<replacingCnt <<std::endl;
    return 0;
}
masha2010,
Если не секрет, сколько лет вашему преподавателю?))
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
17.09.2013, 22:01     В строке заменить все двоеточия точкой с запятой и посчитать количество замен #4
а я сделал с динамическим массивом, и он чет не хочет работать с cin.getline() он через него пререпрыгивает сразу в конец проги, а если закомментить cin>>m; и присвоить int m=10; к примеру то работает норм, в чём прикол?)

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
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
using namespace std;
int main()
{
    int m;
    char *a;
    int counter=0;
    a=new char[m];
    cout<<"Enter size line"<<endl;
    cin>>m;
    cout<<"Enter value line"<<endl;
    cin.getline(a,m);
    for (int i=0;i<m;i++)
    {
        cout<<a[i]<<endl;
        if (a[i]==':')
        {
            a[i]=';';
            counter++;
        }
    }
for (int i=0;i<m;i++)
    {
    cout<<a[i];
    }
cout <<"counter = "<<counter<<endl;
    return 0;
}
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
17.09.2013, 22:09     В строке заменить все двоеточия точкой с запятой и посчитать количество замен #5
dzrkot, не знаю, что у вас там прыгает, но:
В 11 строке вы выделяете неизвестно сколько байт (m не инициализирована)
+ вы не освобождаете выделенную память при помощи delete [] a;
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
17.09.2013, 22:10     В строке заменить все двоеточия точкой с запятой и посчитать количество замен #6
Цитата Сообщение от gromo Посмотреть сообщение
dzrkot, не знаю, что у вас там прыгает, но:
В 11 строке вы выделяете неизвестно сколько байт (m не инициализирована)
+ вы не освобождаете выделенную память при помощи delete [] a;
там cin>>m; дальше, вроде без разницы и так работало, но я подправил, и delete[] a; добавил. всёравно не работает...

ЫЫЫЫ вы какую-то страшную для меня прогу написали...#include <algorithm>
#include <functional> ....что за страшные библиотеки))))
lipnev
60 / 60 / 1
Регистрация: 14.09.2013
Сообщений: 145
17.09.2013, 22:15     В строке заменить все двоеточия точкой с запятой и посчитать количество замен #7
Внесу и я свою лепту.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
string str;
cout<<"Input string "<<endl;
cin>>str;
cout<<"string is "<<str<<endl;
for(unsigned i=0; i=str.find(":", i), i!=std::string::npos;)
  {
    str.replace(i, 1, ";");
    i+=1;
  }
cout<<"string is "<<str<<endl;
 return 0;
}
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
17.09.2013, 22:18     В строке заменить все двоеточия точкой с запятой и посчитать количество замен #8
Цитата Сообщение от dzrkot Посмотреть сообщение
там cin>>m; дальше, вроде без разницы и так работало, но я подправил, и delete[] a; добавил. всёравно не работает...
m у вас используется до того, как будет ей присвоено значение из cin. Посмотрите внимательно.
Цитата Сообщение от dzrkot Посмотреть сообщение
.что за страшные библиотеки))))
Это все стандартная библиотека C++
шаблон std::function появилс в стандарте С++11
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
17.09.2013, 22:22     В строке заменить все двоеточия точкой с запятой и посчитать количество замен #9
Цитата Сообщение от gromo Посмотреть сообщение
m у вас используется до того, как будет ей присвоено значение из cin. Посмотрите внимательно.
да я вижу, я исправил сразу!!!
просто он на это внимания не обращал, и выделял столько сколько нужно(неизвестно почему), до этого я его заполнял rand()-ом и было норм, косяк появился после cin.getline();
gray_fox
17.09.2013, 22:30
  #10

Не по теме:

Цитата Сообщение от gromo Посмотреть сообщение
C++
1
2
3
4
5
6
//Лямбда чекер двоеточий
std::function<bool(const char)> counter = [](const char ch) -> bool {
    if(ch == ':')
        return true;
    return false;
};
Чёт мощно завернули)
C++
1
auto counter = [] (const char ch) { return ch == ':'; };

gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
17.09.2013, 22:42     В строке заменить все двоеточия точкой с запятой и посчитать количество замен #11
dzrkot, Не знаю, что в вашей программе такого, но у меня даже gdb отказывается её трассировать. И она также прыгает.
lipnev
60 / 60 / 1
Регистрация: 14.09.2013
Сообщений: 145
17.09.2013, 22:50     В строке заменить все двоеточия точкой с запятой и посчитать количество замен #12
Забыл посчитать количество замен. Теперь правильно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    string str;
    cout<<"Input string "<<endl;
    cin>>str;
    cout<<"String is "<<str<<endl;
    int counter=0;
    for(unsigned i=0; i=str.find(":", i), i!=std::string::npos;)
    {
        str.replace(i, 1, ";");
        i+=1;
        counter++;
    }
    cout<<"New string is "<<str<<endl;
    cout<<"Number of replaced symbols   "<<counter;
    return 0;
}
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
17.09.2013, 22:57     В строке заменить все двоеточия точкой с запятой и посчитать количество замен #13
Цитата Сообщение от gromo Посмотреть сообщение
dzrkot, Не знаю, что в вашей программе такого, но у меня даже gdb отказывается её трассировать. И она также прыгает.
да всё мне уже помогли, разобрался))
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
17.09.2013, 23:04     В строке заменить все двоеточия точкой с запятой и посчитать количество замен #14
Цитата Сообщение от dzrkot Посмотреть сообщение
да всё мне уже помогли, разобрался))
ну так в чем была проблема?
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
18.09.2013, 18:31     В строке заменить все двоеточия точкой с запятой и посчитать количество замен #15
Цитата Сообщение от gromo Посмотреть сообщение
ну так в чем была проблема?
перед get.line(); написать строку cin.sync(); и всё заработало, с чем связано пока не разбирался ещё, только с работы пришёл))
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
18.09.2013, 18:43     В строке заменить все двоеточия точкой с запятой и посчитать количество замен #16
Цитата Сообщение от gray_fox Посмотреть сообщение
std::function<bool(const char)>
мне интересно какой вид у этого темплейта вообще, чтобы принимал bool(const char)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2013, 23:28     В строке заменить все двоеточия точкой с запятой и посчитать количество замен
Еще ссылки по теме:

C++ В матрице целых чисел заменить все отрицательные элементы нулями.Подсчитать количество замен
C++ Заменить все члены последовательности заданным числом и подсчитать количество замен.
Заменить все члены последовательности, большие заданного числа Z, этим числом; подсчитать количество замен C++

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

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
18.09.2013, 23:28     В строке заменить все двоеточия точкой с запятой и посчитать количество замен #17
Цитата Сообщение от Raali Посмотреть сообщение
мне интересно какой вид у этого темплейта вообще, чтобы принимал bool(const char)
Специализация скорее всего, вроде
C++
1
2
3
4
5
template<typename...>
class function;
 
template<typename R, typename ...Args>
class function<R (Args...)> { /* ... */ };
Yandex
Объявления
18.09.2013, 23:28     В строке заменить все двоеточия точкой с запятой и посчитать количество замен
Ответ Создать тему
Опции темы

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