Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Ilyasbek
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 37
1

Замена символа в строке на число соответствующему номеру по порядку вхождения этого символа в строку

15.02.2018, 12:35. Просмотров 267. Ответов 9
Метки нет (Все метки)

В заданной строке заменить каждый символ «*» числом, соответствующим номеру по порядку вхождения этого символа в строку.

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

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2018, 12:35
Ответы с готовыми решениями:

В строке заменить каждый символ * числом, соответствующим номеру вхождения этого символа в строку
в заданной строке заменить каждый символ "*" числом, соответствующим номеру по...

Определить последнее вхождение символа “р” в строке и вывести строку, начиная с первого символа и до последнего “р” в строке
Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить последнее...

Заменить все первые левые вхождения символа “a” на 00, а все правые вхождения символа “a” на 11
Заменить все первые левые вхождения символа “a” на 00, а все правые вхождения...

Дан символ C и строки S, S0. После каждого вхождения символа C в строку S вставить строку S0
Дан символ C и строки S, S0. После каждого вхождения символа C в строку S...

Как скопировать подстроку из строки до определенного символа? Или удалить, начиная с этого символа
Добрый вечер. Ответ искал, но не нашёл. Предположим, есть строка: ABC|DEF ...

9
igorrr37
1896 / 1505 / 758
Регистрация: 21.12.2010
Сообщений: 2,536
Записей в блоге: 10
15.02.2018, 13:24 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <string>
#include <iostream>
 
int main()
{
    std::string str("*fg*fg*");
    for (int i = 0, ind = 0; (ind = str.find('*', ind)) != std::string::npos; ++i)
    {
        str.replace(ind, 1, std::to_string(i + 1));
    }
    std::cout << str << std::endl;
}
0
повар1
224 / 178 / 151
Регистрация: 24.02.2017
Сообщений: 696
Завершенные тесты: 1
15.02.2018, 15: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
#include <sstream>
#include <iostream>
 
using namespace std;
 
int main()
{
  size_t  i=0;
  stringstream ss;
  string s="*fg*fg* fff fff*gg* ",t;
  while(s[i]!='\0')
   {
     if(s[i]=='*')
       {
        ss<<i+1;
        t+=ss.str();
        ss.str("");
        }
     else
       t+=s[i];
     i++;
     }
  s=t;
  cout<<s<<"\n";
  system("PAUSE");
  return 0;
}
0
Fixer_84
1202 / 751 / 711
Регистрация: 30.04.2016
Сообщений: 2,501
18.02.2018, 18:29 4
Ilyasbek, здравствуйте! Вот еще вариант:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    string str;
    cout << "Enter a string. Use symbol \'*\':\n";
    getline(cin, str);
    for (int i = str.size() - 1; i >= 0; i--)
    {
        if (str[i] == '*')
        {
            str.erase(i, 1);
            str.insert(i, to_string(i+1));
        }
    }
    cout << "Target string:" << "\n";
    cout << str << "\n";
    system("pause");
    return 0;
}
0
Ilyasbek
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 37
26.02.2018, 13:56  [ТС] 5
Спасибо всем!
объясните пожалуйста эти выражения:
Цитата Сообщение от igorrr37 Посмотреть сообщение
for (int i = 0, ind = 0; (ind = str.find('*', ind)) != std::string::npos; ++i)
* * {
* * * * str.replace(ind, 1, std::to_string(i + 1));
* * }
Цитата Сообщение от повар1 Посмотреть сообщение
size_t *i=0;
* stringstream ss;
Цитата Сообщение от повар1 Посмотреть сообщение
t+=ss.str();
* * * * ss.str("");
Цитата Сообщение от Fixer_84 Посмотреть сообщение
str.erase(i, 1);
* * * * * * str.insert(i, to_string(i+1));
0
повар1
224 / 178 / 151
Регистрация: 24.02.2017
Сообщений: 696
Завершенные тесты: 1
26.02.2018, 20:16 6
C++
1
2
3
 ss<<i+1;//записываем номер заменяемого символа в поток.
        t+=ss.str();//к строке добавляем значение из потока
        ss.str("");//очищаем поток
0
Fixer_84
1202 / 751 / 711
Регистрация: 30.04.2016
Сообщений: 2,501
26.02.2018, 23:41 7
Цитата Сообщение от Ilyasbek Посмотреть сообщение
Сообщение от Fixer_84
str.erase(i, 1);
* * * * * * str.insert(i, to_string(i+1));
C++
1
2
3
4
5
if (str[i] == '*')
{
    str.erase(i, 1); //Если символ - '*' - удаляем его.
    str.insert(i, to_string(i + 1)); //И сразу вставляем на место этого удаленного символа число, соответствующее его номеру в строке.
}
P.S. Двигаемся справа налево, чтобы не думать об изменяемой длине строки.
0
Ilyasbek
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 37
27.02.2018, 06:38  [ТС] 8
erase(I, 1); что означает единичка?
0
Fixer_84
1202 / 751 / 711
Регистрация: 30.04.2016
Сообщений: 2,501
27.02.2018, 18:56 9
Цитата Сообщение от Ilyasbek Посмотреть сообщение
erase(I, 1); что означает единичка?
Здравствуйте! Единичка означает, что, начиная с позиции с индексом i будет удален только один символ (в данном случае '*').
0
Ilyasbek
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 37
27.02.2018, 22:20  [ТС] 10
Понял.
Спасибо большое!

Добавлено через 1 минуту
Кто нибудь помогите пожалуйста с этой задачей
Найти пару слов заданной длины с максимальным расстоянием
0
27.02.2018, 22:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2018, 22:20

В строке заменить каждый символ «!» числом, равным индексу этого символа в строке
В заданной строке заменить каждый символ «!» числом, равным индексу этого...

Как проверить в строке все вхождения символа?
Как проверить в строке все вхождения символа и запомнить кусок строки между...

Поиск в строке первого вхождения указанного символа - ошибки
Осуществить поиск в строке первого вхождения указанного символа. выдает...


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

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

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