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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Егор20333
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 2
22.11.2013, 06:32     В строке заменить все запятые на точки, подсчитать количество замен #1
В строке заменить все запятые на точки.Подсчитать кол-во замен!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2013, 06:32     В строке заменить все запятые на точки, подсчитать количество замен
Посмотрите здесь:

Заменить в текстовой строке все запятые на точки и вывести результат на экран C++
C++ Заменить все ее члены, большие данного Z, этим числом. Подсчитать количество замен.
В строке заменить все двоеточия точкой с запятой и посчитать количество замен C++
C++ Заменить все пробелы на запятые, а запятые на точки. Посчитать количество запятых во введенной строке
C++ В матрице целых чисел заменить все отрицательные элементы нулями.Подсчитать количество замен
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
22.11.2013, 09:03     В строке заменить все запятые на точки, подсчитать количество замен #2
как-то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
#include <algorithm>
 
 
int main() {
   std::string string = ",.What, ., da,. heEAc,..,.k!?,";
 
   auto const commaCount = std::count(std::begin(string), std::end(string), ',');
   std::replace(std::begin(string), std::end(string), ',', '.');
 
   std::cout << string << std::endl;
   std::cout << commaCount << " comma(s) replaced with period(s)" << std::endl;
}
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
22.11.2013, 09:08     В строке заменить все запятые на точки, подсчитать количество замен #3
C++
1
2
3
4
5
6
7
8
9
10
11
char str[256];
...
int count=0;
for(int i=0;i<strlen(str);i++)
{
     if(str[i]==',')
     {
         str[i]='.';
         count++;
     }
}
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
22.11.2013, 10:06     В строке заменить все запятые на точки, подсчитать количество замен #4
Цитата Сообщение от gray_fox Посмотреть сообщение
как-то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
#include <algorithm>
 
 
int main() {
   std::string string = ",.What, ., da,. heEAc,..,.k!?,";
 
   auto const commaCount = std::count(std::begin(string), std::end(string), ',');
   std::replace(std::begin(string), std::end(string), ',', '.');
 
   std::cout << string << std::endl;
   std::cout << commaCount << " comma(s) replaced with period(s)" << std::endl;
}
Компилится не будет, хотя бы потому что итераторы это методы строки.
В данном случае лучше использовать алгоритм for_each и воспользовоться тем фактом, что он возвращает свой функтор.
Кликните здесь для просмотра всего текста
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
#include<iostream>
#include<string>
#include<algorithm>
typedef std::string::size_type strSize;
class Counter {
    strSize count;
public:
    Counter(): count(0)
    {}
    void operator() (char& ch) {
        if (ch == ',') {
            ch = '.';
            ++count;
        }
    }
    strSize GetCount() {
        return count;
    }
};
int main()
{
    system("chcp 1251>0");
    std::string str("жил, был, еж, ");
    std::copy(str.begin(), str.end(), std::ostream_iterator<char>(std::cout));
    std::cout << std::endl;
 
    Counter result = std::for_each(str.begin(), str.end(), Counter());
    
    std::cout << "Количество замен:" << result.GetCount() << std::endl;
    std::copy(str.begin(), str.end(), std::ostream_iterator<char>(std::cout));
    std::cout << std::endl;
 
    system("pause");
    return 0;
}
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
22.11.2013, 10:09     В строке заменить все запятые на точки, подсчитать количество замен #5
Цитата Сообщение от Ilot Посмотреть сообщение
Компилится не будет
http://ideone.com/Vr9neg
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
22.11.2013, 10:16     В строке заменить все запятые на точки, подсчитать количество замен #6
Цитата Сообщение от gray_fox Посмотреть сообщение
Хм... похоже в старом стандарте этого нет так как мой компиллятор ругается.
Но все равно использование for_each предпочтительнее, так как вам не придется проходить по массиву дважды.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
22.11.2013, 10:20     В строке заменить все запятые на точки, подсчитать количество замен #7
Цитата Сообщение от Ilot Посмотреть сообщение
Но все равно использование for_each предпочтительнее, так как вам не придется проходить по массиву дважды.
Описывать по новыму типу на каждый чих? Уж лучше обычный цикл.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
22.11.2013, 10:26     В строке заменить все запятые на точки, подсчитать количество замен #8
Цитата Сообщение от gray_fox Посмотреть сообщение
Описывать по новыму типу на каждый чих? Уж лучше обычный цикл.
Ну да. Для этого и предназначены функторы, однако в вызов функции можно добавить что угодно и сколько угодно вместо того, что бы для каждой опреации запускать отдельный цикл. Неразумно не пользоваться для решения задач ресурсами STL которые для этого и предназначенны.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
22.11.2013, 10:31     В строке заменить все запятые на точки, подсчитать количество замен #9
Ilot, я имел ввиду for/while, как в сообщении zss.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
22.11.2013, 10:39     В строке заменить все запятые на точки, подсчитать количество замен #10
Цитата Сообщение от zss Посмотреть сообщение
for(int i=0;i<strlen(str);i++)
Не эффективный цикл. На каждой итерации вычисляется длина. Предпочтительнее заменить на:
C++
1
while( char* c = str; *c; c++ )
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
22.11.2013, 11:30     В строке заменить все запятые на точки, подсчитать количество замен #11
Цитата Сообщение от Tulosba Посмотреть сообщение
Не эффективный цикл. На каждой итерации вычисляется длина. Предпочтительнее заменить на:
C++
1
while( char* c = str; *c; c++ )
Это что опять какой-то новый стандарт или просто спутанно while и for?
Однако как не прискорбно это работать не будет.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
22.11.2013, 11:50     В строке заменить все запятые на точки, подсчитать количество замен #12

Не по теме:

Цитата Сообщение от Ilot Посмотреть сообщение
или просто спутанно while и for?
угу


с for работает как надо: http://ideone.com/vfNhSg
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
22.11.2013, 11:52     В строке заменить все запятые на точки, подсчитать количество замен #13
Вот кстати пример где этот подход не работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
#include<string>
 
int main()
{
    //system("chcp 1251>0");
    char str1[5] = {'a','b','c','d','e'};
    char str2[] = "abcde";
 
    for ( char* c = str1; *c; c++ )
    {
        std::cout << *c << ' ';
    }
    std::cout << std::endl;
    for ( c = str2; *c; c++ )
    {
        std::cout << *c << ' ';
    }
    std::cout << std::endl;
 
    system("pause");
    return 0;
}
gray_fox
22.11.2013, 11:56
  #14

Не по теме:

Цитата Сообщение от Ilot Посмотреть сообщение
Вот кстати пример где этот подход не работает:
Ну вообще str1 сложно назвать строкой...

zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
22.11.2013, 12:39     В строке заменить все запятые на точки, подсчитать количество замен #15
C++
1
char str1[6] = {'a','b','c','d','e',0};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2013, 12:52     В строке заменить все запятые на точки, подсчитать количество замен
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
22.11.2013, 12:52     В строке заменить все запятые на точки, подсчитать количество замен #16
Цитата Сообщение от Ilot Посмотреть сообщение
Вот кстати пример где этот подход не работает:
gray_fox сказал, zss исправил. От себя добавлю:
Си-строка по определению должна заканчиваться нулевым символом, иначе это не си-строка.
Ilot, попробуйте для примера на Вашем массиве стандартную strlen()
Yandex
Объявления
22.11.2013, 12:52     В строке заменить все запятые на точки, подсчитать количество замен
Ответ Создать тему
Опции темы

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