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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
mascha2010
0 / 0 / 0
Регистрация: 23.04.2013
Сообщений: 5
#1

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

17.09.2013, 20:55. Просмотров 2155. Ответов 16
Метки нет (Все метки)

В строке заменить все двоеточия ( точкой с запятой ( и посчитать количество замен.
 Комментарий модератора 
Перенесено из раздела Turbo Pascal
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2013, 20:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В строке заменить все двоеточия точкой с запятой и посчитать количество замен (C++):

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

В строке заменить все запятые на точки, подсчитать количество замен - C++
В строке заменить все запятые на точки.Подсчитать кол-во замен!

Заменить в строке запятыми все двоеточия - C++
Доброго времени суток. Условие задачи: ____________________________________________________________ _____ Даны натуральное число п,...

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

Заменить все члены последовательности заданным числом и подсчитать количество замен. - C++
Дана последовательность действительных чисел a1, а2, ..., аn. Заменить все ее члены, большие данного Z, этим числом. Подсчитать количество...

Заменить все ее члены, большие данного Z, этим числом. Подсчитать количество замен. - C++
Дана последовательность действительных чисел a1, a2, ..., an. Заменить все ее члены, большие данного Z, этим числом. Подсчитать количество...

16
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;
}
0
gromo
372 / 271 / 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,
Если не секрет, сколько лет вашему преподавателю?))
1
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,037
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;
}
0
gromo
372 / 271 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
17.09.2013, 22:09 #5
dzrkot, не знаю, что у вас там прыгает, но:
В 11 строке вы выделяете неизвестно сколько байт (m не инициализирована)
+ вы не освобождаете выделенную память при помощи delete [] a;
1
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,037
17.09.2013, 22:10 #6
Цитата Сообщение от gromo Посмотреть сообщение
dzrkot, не знаю, что у вас там прыгает, но:
В 11 строке вы выделяете неизвестно сколько байт (m не инициализирована)
+ вы не освобождаете выделенную память при помощи delete [] a;
там cin>>m; дальше, вроде без разницы и так работало, но я подправил, и delete[] a; добавил. всёравно не работает...

ЫЫЫЫ вы какую-то страшную для меня прогу написали...#include <algorithm>
#include <functional> ....что за страшные библиотеки))))
0
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;
}
1
gromo
372 / 271 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
17.09.2013, 22:18 #8
Цитата Сообщение от dzrkot Посмотреть сообщение
там cin>>m; дальше, вроде без разницы и так работало, но я подправил, и delete[] a; добавил. всёравно не работает...
m у вас используется до того, как будет ей присвоено значение из cin. Посмотрите внимательно.
Цитата Сообщение от dzrkot Посмотреть сообщение
.что за страшные библиотеки))))
Это все стандартная библиотека C++
шаблон std::function появилс в стандарте С++11
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,037
17.09.2013, 22:22 #9
Цитата Сообщение от gromo Посмотреть сообщение
m у вас используется до того, как будет ей присвоено значение из cin. Посмотрите внимательно.
да я вижу, я исправил сразу!!!
просто он на это внимания не обращал, и выделял столько сколько нужно(неизвестно почему), до этого я его заполнял rand()-ом и было норм, косяк появился после cin.getline();
0
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 == ':'; };

1
gromo
372 / 271 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
17.09.2013, 22:42 #11
dzrkot, Не знаю, что в вашей программе такого, но у меня даже gdb отказывается её трассировать. И она также прыгает.
0
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;
}
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,037
17.09.2013, 22:57 #13
Цитата Сообщение от gromo Посмотреть сообщение
dzrkot, Не знаю, что в вашей программе такого, но у меня даже gdb отказывается её трассировать. И она также прыгает.
да всё мне уже помогли, разобрался))
0
gromo
372 / 271 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
17.09.2013, 23:04 #14
Цитата Сообщение от dzrkot Посмотреть сообщение
да всё мне уже помогли, разобрался))
ну так в чем была проблема?
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,037
18.09.2013, 18:31 #15
Цитата Сообщение от gromo Посмотреть сообщение
ну так в чем была проблема?
перед get.line(); написать строку cin.sync(); и всё заработало, с чем связано пока не разбирался ещё, только с работы пришёл))
0
18.09.2013, 18:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2013, 18:31
Привет! Вот еще темы с ответами:

В матрице целых чисел заменить все отрицательные элементы нулями.Подсчитать количество замен - C++
В матрице целых чисел заменить все отрицательные элементы нулями.Подсчитать количество замен.Вывести конечную матрицу #include &lt;conio.h&gt;...

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

Заменить все члены последовательности, большие заданного числа Z, этим числом; подсчитать количество замен - C++
Дана последовательность действительных чисел а1, а2,..., an. Заменить все ее члены, большие данного Z, этим числом. Подсчитать количество...

В строке все запятые заменить точкой, и перед первым словом вставить слово STRING - C++
Помогите написать программу, реализовать которую нужно при помощи system.string В строке все запятые заменить точкой, и перед первым...


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

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

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