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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Егор20333
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 2
#1

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

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

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

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

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

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

В данной строке все запятые заменить на точки - C++
Помогите пожалуйста новичку с первой работой на С++ или объясните, как дописать while. Условие задачи: В данной строке все запятые ",",...

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

Заменить в текстовой строке все запятые на точки и вывести результат на экран - C++
Народ как сделать в обычном borland c следющее: Заменить в текстовой строке все запятые на точки и вывести результат на экран

15
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 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;
}
0
zss
Модератор
Эксперт С++
6578 / 6140 / 2021
Регистрация: 18.12.2011
Сообщений: 15,994
Завершенные тесты: 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++;
     }
}
1
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 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;
}
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
22.11.2013, 10:09 #5
Цитата Сообщение от Ilot Посмотреть сообщение
Компилится не будет
http://ideone.com/Vr9neg
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
22.11.2013, 10:16 #6
Цитата Сообщение от gray_fox Посмотреть сообщение
Хм... похоже в старом стандарте этого нет так как мой компиллятор ругается.
Но все равно использование for_each предпочтительнее, так как вам не придется проходить по массиву дважды.
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
22.11.2013, 10:20 #7
Цитата Сообщение от Ilot Посмотреть сообщение
Но все равно использование for_each предпочтительнее, так как вам не придется проходить по массиву дважды.
Описывать по новыму типу на каждый чих? Уж лучше обычный цикл.
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
22.11.2013, 10:26 #8
Цитата Сообщение от gray_fox Посмотреть сообщение
Описывать по новыму типу на каждый чих? Уж лучше обычный цикл.
Ну да. Для этого и предназначены функторы, однако в вызов функции можно добавить что угодно и сколько угодно вместо того, что бы для каждой опреации запускать отдельный цикл. Неразумно не пользоваться для решения задач ресурсами STL которые для этого и предназначенны.
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
22.11.2013, 10:31 #9
Ilot, я имел ввиду for/while, как в сообщении zss.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.11.2013, 10:39 #10
Цитата Сообщение от zss Посмотреть сообщение
for(int i=0;i<strlen(str);i++)
Не эффективный цикл. На каждой итерации вычисляется длина. Предпочтительнее заменить на:
C++
1
while( char* c = str; *c; c++ )
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
22.11.2013, 11:30 #11
Цитата Сообщение от Tulosba Посмотреть сообщение
Не эффективный цикл. На каждой итерации вычисляется длина. Предпочтительнее заменить на:
C++
1
while( char* c = str; *c; c++ )
Это что опять какой-то новый стандарт или просто спутанно while и for?
Однако как не прискорбно это работать не будет.
1
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.11.2013, 11:50 #12

Не по теме:

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


с for работает как надо: http://ideone.com/vfNhSg
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 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;
}
0
gray_fox
22.11.2013, 11:56
  #14

Не по теме:

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

0
zss
Модератор
Эксперт С++
6578 / 6140 / 2021
Регистрация: 18.12.2011
Сообщений: 15,994
Завершенные тесты: 1
22.11.2013, 12:39 #15
C++
1
char str1[6] = {'a','b','c','d','e',0};
0
22.11.2013, 12:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2013, 12:39
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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