Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/22: Рейтинг темы: голосов - 22, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 2
1

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

22.11.2013, 06:32. Показов 4568. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В строке заменить все запятые на точки.Подсчитать кол-во замен!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2013, 06:32
Ответы с готовыми решениями:

В строке заменить все точки «.» на запятые «,», а двоеточия «:» на точку с запятой «;». Подсчитать количество замен
В строке заменить все точки «.» на запятые «,», а двоеточия «:» на точку с запятой «;». Подсчитать...

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

Заменить в строке все точки на восклицательные знаки. Подсчитать количество замен
Помогите пожалуйста полному профану!

Заменить в строке все вхождения ‘ph’ на ‘f’ и подсчитать количество замен.
Дана строка S. Заменить все вхождения ‘ph’ на ‘f’ и подсчитать количество замен. Измененную строку...

15
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
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;
}
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,718
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++;
     }
}
1
Эксперт по математике/физикеЭксперт С++
2049 / 1367 / 396
Регистрация: 16.05.2013
Сообщений: 3,508
Записей в блоге: 6
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;
}
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
22.11.2013, 10:09 5
Цитата Сообщение от Ilot Посмотреть сообщение
Компилится не будет
http://ideone.com/Vr9neg
0
Эксперт по математике/физикеЭксперт С++
2049 / 1367 / 396
Регистрация: 16.05.2013
Сообщений: 3,508
Записей в блоге: 6
22.11.2013, 10:16 6
Цитата Сообщение от gray_fox Посмотреть сообщение
Хм... похоже в старом стандарте этого нет так как мой компиллятор ругается.
Но все равно использование for_each предпочтительнее, так как вам не придется проходить по массиву дважды.
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
22.11.2013, 10:20 7
Цитата Сообщение от Ilot Посмотреть сообщение
Но все равно использование for_each предпочтительнее, так как вам не придется проходить по массиву дважды.
Описывать по новыму типу на каждый чих? Уж лучше обычный цикл.
0
Эксперт по математике/физикеЭксперт С++
2049 / 1367 / 396
Регистрация: 16.05.2013
Сообщений: 3,508
Записей в блоге: 6
22.11.2013, 10:26 8
Цитата Сообщение от gray_fox Посмотреть сообщение
Описывать по новыму типу на каждый чих? Уж лучше обычный цикл.
Ну да. Для этого и предназначены функторы, однако в вызов функции можно добавить что угодно и сколько угодно вместо того, что бы для каждой опреации запускать отдельный цикл. Неразумно не пользоваться для решения задач ресурсами STL которые для этого и предназначенны.
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
22.11.2013, 10:31 9
Ilot, я имел ввиду for/while, как в сообщении zss.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
22.11.2013, 10:39 10
Цитата Сообщение от zss Посмотреть сообщение
for(int i=0;i<strlen(str);i++)
Не эффективный цикл. На каждой итерации вычисляется длина. Предпочтительнее заменить на:
C++
1
while( char* c = str; *c; c++ )
0
Эксперт по математике/физикеЭксперт С++
2049 / 1367 / 396
Регистрация: 16.05.2013
Сообщений: 3,508
Записей в блоге: 6
22.11.2013, 11:30 11
Цитата Сообщение от Tulosba Посмотреть сообщение
Не эффективный цикл. На каждой итерации вычисляется длина. Предпочтительнее заменить на:
C++
1
while( char* c = str; *c; c++ )
Это что опять какой-то новый стандарт или просто спутанно while и for?
Однако как не прискорбно это работать не будет.
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
22.11.2013, 11:50 12

Не по теме:

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


с for работает как надо: http://ideone.com/vfNhSg
0
Эксперт по математике/физикеЭксперт С++
2049 / 1367 / 396
Регистрация: 16.05.2013
Сообщений: 3,508
Записей в блоге: 6
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;
}
0
gray_fox
22.11.2013, 11:56
  #14

Не по теме:

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

0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,718
22.11.2013, 12:39 15
C++
1
char str1[6] = {'a','b','c','d','e',0};
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
22.11.2013, 12:52 16
Цитата Сообщение от Ilot Посмотреть сообщение
Вот кстати пример где этот подход не работает:
gray_fox сказал, zss исправил. От себя добавлю:
Си-строка по определению должна заканчиваться нулевым символом, иначе это не си-строка.
Ilot, попробуйте для примера на Вашем массиве стандартную strlen()
1
22.11.2013, 12:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.11.2013, 12:52
Помогаю со студенческими работами здесь

В строке заменить все цифры 5 и 6 пробелом. Подсчитать количество замен
Здравствуйте) Помогите,пожалуйста, с решением задачи: Дана строка. В строке заменить все цифры 5...

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

В строке заменить все двоеточия на точку с запятой. Подсчитать количество замен
Я написала, работает, но количество почему то одно и то же, помогите пожалуйста! procedure...

В строке заменить все двоеточия (:) точкой с запятой (;). Подсчитать количество замен
помогите в т.Паскаль(оч надо!!

В строке заменить все двоеточия (:) точкой с запятой (;). Подсчитать количество замен
В строке заменить все двоеточия (:) точкой с запятой (;). Подсчитать количество замен. Памирыч:...

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru