Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/50: Рейтинг темы: голосов - 50, средняя оценка - 4.98
4 / 4 / 2
Регистрация: 13.12.2011
Сообщений: 46

В строке символов заменить каждый второй символ ! на $

18.10.2012, 20:39. Показов 9891. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот задание: В строке символов заменить каждый второй символ ! на $.
Я сделал что бы заменяло все символы "!", подскажите как сделать что б каждый второй.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
class Program
{
    static void Main(string[] args)
    {
        
        Console.WriteLine("введите строку =");
        string s = Console.ReadLine();
        {
            Console.WriteLine(s.Replace('!', '$'));
            Console.ReadKey(true);
}}}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.10.2012, 20:39
Ответы с готовыми решениями:

В строке символов заменить каждый второй символ! На $.
В строке символов заменить каждый второй символ! На $. Program zad; var n,i:integer; s1:string; begin writeln('vvedite...

В строке символов заменить каждый второй символ s на f
Подскажите,пожалуйста,как в строке символов заменить каждый второй символ s на f

В строке символов заменить каждый второй символ ! на $
Нужен код на СИ Во всех заданиях предусмотреть захват и освобождение динамической памяти (операции new, delete), решение оформить в...

15
28 / 28 / 5
Регистрация: 07.09.2012
Сообщений: 119
18.10.2012, 23:55
придумал вот такой алгоритм. Он не идеален, но свою задачу решает
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
using System;
 
 
class Program
{
    static void Main(string[] args)
    {
        int count = 0;
 
        Console.WriteLine("введите строку =");
        string s = Console.ReadLine();
        char[] ch = new char[s.Length];
        for (int i = 0; i < s.Length; i++)
        {
            if (s[i] == '!')
            {
                count++;
                if (count % 2 == 0)
                    ch[i] = '$';
                else ch[i] = s[i];
            }
            else ch[i] = s[i];
            
        }
        string sNew = new string(ch);
        Console.WriteLine(sNew);
    }
}
1
4 / 4 / 2
Регистрация: 13.12.2011
Сообщений: 46
19.10.2012, 09:39  [ТС]
Спасибо, очень помогли)
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.10.2012, 12:22
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
using System;
using System.Text;
 
 
namespace ConsoleApplication33
{
    internal static class Program
    {
        private static void Main(string[] args)
        {
            string s = "Привет! Я хочу! Сделать! Это задание!";
            Console.WriteLine(s.MyReplace());
            Console.ReadKey();
        }
 
 
        private static string MyReplace(this string s)
        {
            bool flag = true;
            var sb = new StringBuilder(s.Length, s.Length);
            foreach (char c in s)
                sb.Append(c == '!' && (flag = !flag) ? '$' : c);
            return sb.ToString();
        }
    }
}
Добавлено через 20 минут
8 строк кода)
0
Заблокирован
19.10.2012, 13:49
В одну строку, хе-хе

C#
1
s = s.Aggregate(new { s = "", f = false }, (a, c) => new { s = a.s + (c == '!' && a.f ? '$' : c), f = c == '!' ? !a.f : a.f}).s;
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.10.2012, 13:52
NightmareZ, дублирование кода - отказать
0
Заблокирован
19.10.2012, 14:01
Цитата Сообщение от Psilon Посмотреть сообщение
NightmareZ, дублирование кода - отказать
Да лааадно тебе, дублирование... лишний условный оператор погоды не сыграет.

Добавлено через 3 минуты
C#
1
s = s.Aggregate(new { s = "", f = false }, (a, c) => c == '!' ? new { s = a.s + (a.f ? '$' : c) , f = !a.f } : new { s = a.s + c, f = a.f }).s;
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.10.2012, 14:01
NightmareZ, затести стопотчером, мой вариант 100% быстрее
0
Заблокирован
19.10.2012, 14:02
Цитата Сообщение от Psilon Посмотреть сообщение
NightmareZ, затести стопотчером, мой вариант 100% быстрее
И не сомневаюсь Я не удивлюсь, если он в разы быстрее
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.10.2012, 14:09
NightmareZ, да я уже писал проги, которые были на 4-5 порядков быстрее, чем предложенные тут варианты Так что в разы - мелко для меня)
1
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
19.10.2012, 22:27
Ну если уж речь идет о скорости, то почему же нам не вспомнить про указатели, будет еще быстрее:
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
36
37
38
39
40
41
42
43
44
45
46
47
static unsafe void Main(string[] args)
{
    Func<string, string> repluns = (str) =>
        {
            var flag = true;
            var len = str.Length;
            fixed (char* p = str)
            {
                char* arr = stackalloc char[len];
                for (int i = 0; i < len; ++i)
                    *(char*)(arr + i) = *(char*)(p + i) == '!' && (flag = !flag) ? '$' : *(char*)(p + i);
                return new string(arr, 0, len);
            }
        };
 
    Func<string, string> repsafe = (str) =>
        {
            bool flag = true;
            var sb = new StringBuilder(str.Length, str.Length);
            foreach (char c in str)
                sb.Append(c == '!' && (flag = !flag) ? '$' : c);
            return sb.ToString();
        };
 
    var stopWatch = new Stopwatch();
    var r = new Random();
    var content = new StringBuilder(100000, 1000000);
 
    for (int i = 0; i < 100000; ++i)
        content.Append(r.Next(35, 90));
 
    var s = content.ToString();
 
    stopWatch.Start();
    repsafe(s);
    stopWatch.Stop();
    Console.WriteLine(stopWatch.ElapsedTicks);
 
    stopWatch.Reset();
 
    stopWatch.Start();
    repluns(s);
    stopWatch.Stop();
    Console.WriteLine(stopWatch.ElapsedTicks);
 
    Console.ReadLine();
}
результат:
Code
1
2
10771
4915
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.10.2012, 23:12
Konctantin, это мой же код, просто переписанный на указателях Вопрос был в алгоритме)) Если предложите что-то быстрее - пожалуйста.
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
19.10.2012, 23:16
ну а что в нем нового? я ничего и не выдумывал, просто начали говорить о скорости, вот я вам и напомнил о еще больших скоростях.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.10.2012, 23:23
Konctantin, не доводите до абсурда, давайте еще про подключение библиотек на неуправляемом коде или вообще асме поговорим.
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
19.10.2012, 23:40
хм... а в чем собственно абсурд? в данном случае все родное. памяти сжыраем меньше, меньше делаем проверок и преобразований. мы ничего не подключаем, ничего не городим. в чем абсурд?.

ЗЫ. Я частенько пользуюсь указателями, когда речь идет о быстродействии и больших объемах.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.10.2012, 23:40
Konctantin, unsafe в шарпе не приветствуется... Не спорю, быстрее. Но разница не столь существена, чтобы лезть в отдельные настройки проекта ради возможности компиляции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.10.2012, 23:40
Помогаю со студенческими работами здесь

Заменить каждый второй символ в строке
Нужна помощь Например имеется строка: 932932492349249342376 Требуется: Заменить все девятки из каждого второго символа на 5. ...

Строка: Заменить каждый второй символ на «*» и вычислить количество символов, отличных от «*»
Доброго времени суток.Нужна помощь.Поставлена такая задача «Ввести строку символов.Заменить каждый второй символ на «*» и вычислить...

В строке символов заменить каждый второй символ "!" на "$"
Подскажите пожалуйста возможное решения данной задачи: В строке символов заменить каждый второй символ ! на $. Предусмотреть захват и...

Если в строке имеется сочетание символов "la", то заменить каждый символ, встречающийся после первого вхождения этого сочетания, на символ "!"
Дана строка из символов. Если в строке имеется сочетание символов &quot;la&quot;, то заменить каждый символ, встречающийся после первого вхождения...

В первой заданной строке удвоить каждый символ, принадлежащий также второй строке
Составьте программу, в результате выполнения которой в первой заданной строке удваивается каждый символ, принадлежащий также второй...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru