0 / 0 / 0
Регистрация: 01.03.2018
Сообщений: 71
1

Заменить символ двоеточия на символ точки в заданной строке, начиная с указанной позиции

02.07.2018, 21:35. Показов 3968. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Правильно ли я делаю задание:
Составить и протестировать функцию для замены символа двоеточие на символ точки в заданной строке, начиная с указанной позиции. Строка должна быть определена как символьный массив и вводиться с клавиатуры.

код:
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
#include <iostream>
 
 using namespace std;
 
void replace(char* array, char old_value, char new_value) { 
//char* array - указатель на объект
  for (; *array; ++array)
    if (*array == old_value)
      *array = new_value;
}
 
int main() {
 
  char array[25] = "";
  cout << "enter words: ";
  cin >> array;
  
  replace(array, ':', '.');
  
  cout << array << endl;
  
 
  
  return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.07.2018, 21:35
Ответы с готовыми решениями:

Написать и протестировать функцию для замены символов ‘:’ на ‘.’ в заданной строке, начиная с указанной позиции
Написать и протестировать функцию для замены символов ‘:’ на ‘.’ в заданной строке, начиная с...

Дана строка произвольного текста. Заменить все символы n на символ m, начиная с позиции k
2.1. Дана строка произвольного текста. Заменить все символы n на символ m, начиная с позиции k....

Строки. Заменить символы - цифры на символ '*'. В заданной строке заменить подряд идущие пробелы
П.5.16.Правил Запрещено создавать темы с множеством вопросов во всех разделах, кроме разделов...

Как заменить символ . (точки) на символ / (right слэш)?
Доброго времени суток! думаю это уже было, но найти не смог. Как заменить символ ....

16
7430 / 5022 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
02.07.2018, 21:50 2
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
#include <iostream>
using namespace std;
 
void Replace (char* s, int pos)
{ 
    int i=pos-1;
    while (s[i])
    {
    if (s[i]==':') s[i]='.';
    i++;
    }
}
 
int main()
{
    int pos;
    char s[256];
    cout << "String:\n";
    cin.getline(s, 256);
   
    cout <<"pos="; cin >>pos; 
    
    Replace (s, pos);
     
    cout <<s<<"\n";
system("pause");
return 0;
}
0
0 / 0 / 2
Регистрация: 15.01.2015
Сообщений: 66
02.07.2018, 22:40 3
Цитата Сообщение от Spectr456 Посмотреть сообщение
Правильно ли я делаю задание:
Составить и протестировать функцию для замены символа двоеточие на символ точки в заданной строке, начиная с указанной позиции. Строка должна быть определена как символьный массив и вводиться с клавиатуры.

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>
 
 using namespace std;
 
void replace(char* array, char old_value, char new_value) { 
//char* array - указатель на объект
  for (; *array; ++array)
    if (*array == old_value)
      *array = new_value;
}
 
int main() {
 
  char array[25] = "";
  cout << "enter words: ";
  cin >> array;
  
  replace(array, ':', '.');
  
  cout << array << endl;
  
  return 0;
}
Неправильно, не полностью, а также не очень красиво.

Неправильно, так как из-за использования ввода через
C++
1
std::cin >>
считывается не вся строка, если есть пробелы.

Не польностью, потому что не выполняется данная часть условия "начиная с указанной позиции".

Некрасиво по причине того, что без надобности используются указатели.

Добавлено через 12 минут
Пост выше получился довольно грубым. Не обижайтесь, я не специально так написал. Просто хотелось быть как можно более кратким))
0
0 / 0 / 0
Регистрация: 01.03.2018
Сообщений: 71
03.07.2018, 09:51  [ТС] 4
А как сделать защиту от не правильного ввода ? ( когда position >array )
0
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
03.07.2018, 09:58 5
Spectr456,
C++
1
if(positions > (в твоем случае 25) || positions < 0) std::cout << "Неправильная позиция";
0
0 / 0 / 0
Регистрация: 01.03.2018
Сообщений: 71
03.07.2018, 10:19  [ТС] 6
А если я хочу ввести строк меньше чем позиций
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
03.07.2018, 10:20 7
Создаём булевскую переменную типа flag. Данная переменная нам будет нужна для того, что-бы условие, которое последует далее, продолжалось до тех пор, пока дело не дойдёт до нуля-терминатора.:
C++
1
bool flag = false;
Данная переменная нужна будет как точка, с которой замена будет вестись. Задаём ей значение с cin (порядковый номер элемента):
C++
1
char start_point;
Вот всё условие:
C++
1
2
3
4
5
6
7
if (имя_строки[размер_строки] == start_point)
    flag = true;
if (flag == true)
{
    if (имя_строки[размер_строки] == ':')
        имя_строки[размер_строки] == '.';
}
Как-то так. Не благодарите (если собираетесь, а если нет, то не ругайте )
0
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
03.07.2018, 10:45 8
Цитата Сообщение от N0VY Посмотреть сообщение
C++
1
2
if (имя_строки[размер_строки] == ':')
    имя_строки[размер_строки] == '.';
размер строки? Чего? перед тем как писать такое проверили бы
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
03.07.2018, 11:39 9
Что не так? Что вы ко мне пристали, гражданин Голубой Котяра?

Добавлено через 53 минуты
Ну я подумывал о том, что-бы заменить двоеточие на точку с помощью этих действий. А если Вас пугают имена строк и их размеры, то пожалуйте (кстати, немного переделал так, что-бы наверняка понравилось и что-бы никто ничего не говорил). Пихнул в функцию, в которую мы передаём строку, start_point (всё без * или &) и step. (Функцию не написал: своих дел полно ):

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
    char array[25] = "";
    cout << "enter words: ";
    cin >> array;
 
    char* step = array;
    int start_point;
    bool flag = false;
 
    cout << "start_point = ";
    cin >> start_point;
 
    while (*step != '\0')
    {
        if (*step == start_point)
            flag = true;
 
        if (flag == true)
        {
            if (*step == ':')
            {
                *step = '.';
            }
        }
        ++step;
    }
    system("pause");
Выводим полученную строку и всё.
0
7430 / 5022 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
03.07.2018, 13:10 10
Цитата Сообщение от Spectr456 Посмотреть сообщение
А как сделать защиту от не правильного ввода ? ( когда position >array )
C++
1
2
3
4
5
6
7
 int m=s.size();
    do
    {
    cin >> pos;
    if (pos<1 || pos>m) cout <<"1<=pos<=m !!! Repeat please...\n";
    }
    while (pos<1 || pos>m);
Цитата Сообщение от Spectr456 Посмотреть сообщение
А если я хочу ввести строк меньше чем позиций
строка по условию одна. её размер m. позиция - номер символа этой строки от 1 до m. в чём Ваш вопрос ?
0
0 / 0 / 0
Регистрация: 01.03.2018
Сообщений: 71
03.07.2018, 18:03  [ТС] 11
Например :
Ввёл строку из 5 символов
и ввёл позицию 40
хочу чтобы вывело сообщение об ошибке
0
7430 / 5022 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
03.07.2018, 19:32 12
Лучший ответ Сообщение было отмечено Spectr456 как решение

Решение

Цитата Сообщение от Spectr456 Посмотреть сообщение
хочу чтобы вывело сообщение об ошибке
строка чуть выше
Цитата Сообщение от Yetty Посмотреть сообщение
C++
1
cout <<"1<=pos<=m !!! Repeat please...\n";
это и есть сообщение об ошибке. можете добавить в него слово ошибка:
C++
1
cout <<"Error !1<=pos<=m !!! Repeat please...\n";
цикл будет запрашивать новое число пока не введёте правильное
1
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
03.07.2018, 23:49 13
Цитата Сообщение от Yetty Посмотреть сообщение
C++
1
int m=s.size();
Только тогда уж:
C++
1
int m = strlen(array);
Т.к. у ТСа массив char`ов.

P.s. имя array лучше не юзать, причем с подключенным пространством имен std...
0
0 / 0 / 0
Регистрация: 01.03.2018
Сообщений: 71
04.07.2018, 06:55  [ТС] 14
Пишет : нет декларации strlen в этой области видимости
0
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
04.07.2018, 10:58 15
Spectr456,
#include <string.h> //C
или
#include <cstring> //C++
0
7430 / 5022 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
04.07.2018, 12:02 16
Цитата Сообщение от SuperKir Посмотреть сообщение
Только тогда уж:
C++
1
int m = strlen(array);
согласен, size() это для string

Spectr456, используйте вариант SuperKir - вместо int m=s.size(); поставьте int m=strlen(s); подключив библиотеку #include <cstring>

или замените int m=s.size(); на такие строки:
C++
1
2
int m;
for (m=0; s[m]; m++);
без подключения доп. библиотек
0
0 / 0 / 0
Регистрация: 01.03.2018
Сообщений: 71
06.07.2018, 15:43  [ТС] 17
Спасибо уже разобрался
0
06.07.2018, 15:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.07.2018, 15:43
Помогаю со студенческими работами здесь

Обменять символ 'a' на символ 'т' в заданной строке. Оформить в виде функции
Обменять символ 'a' на символ 'т' в заданной строке. Оформить в виде функции

Указанный символ на указанной позиции
Есть текстовый файл каждая строка которого содержит некоторый текст. Доработать программу в...

в заданной строке заменить каждый символ '!' числом с++
Добрый день Мне нужна помощь на с++. дело в следующим: в заданной строке заменить каждый символ...

[MASM32] Заменить заданный символ в строке текста на указанный новый символ
Не могу сам сделать, так как мало изучал ассемблер, но очень надо( 4) Напишите диалоговую...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru