Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156

Инкремент значения строки

26.01.2017, 15:19. Показов 3792. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Есть строка
AB
нужно увеличить эти символы в лексикографическом значении: например АВ + 2 = AD
При переходе через "Z" ведущие символы должны тоже увеличиваться AZ + 3 = BC
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.01.2017, 15:19
Ответы с готовыми решениями:

Инкремент значения переменной
Уважаемые форумчане, разъясните пожалуйста ответ компилятора int i = 3; int y = ++i + i++ + i++ + ++i + ++i + i++; ...

Неожиданный результат при выводе значения переменной, несмотря на инкремент
подскажите почему значения a и с начинаются с 1 а не с 2 стоит же "++" int a = 1; void f() { int b = 1; // инициализируется...

Инкремент строки из одного символа
Есть переменная key - строка из одного символа. Как сделать его инкремент? key++, key++, key.charCodeAt++ не работают.

12
309 / 309 / 215
Регистрация: 24.09.2013
Сообщений: 771
26.01.2017, 15:42
Stick,
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
using System;
using System.Text;
 
class Program
{
    public static void Main()
    {
        string text = "AB";
        Console.WriteLine(Increment(text, 10));
        Console.ReadKey();
    }
 
    static string Increment(string target, int num)
    {
        StringBuilder sb = new StringBuilder(target);
        for (int i = target.Length - 1; i >= 0; i--)
        {
            while (sb[i] != 'Z' && num > 0)
            {
                sb[i] = (char)(sb[i] + 1);
                num--;
            }
        }
 
        if (num > 0)
        {
            for (int i = 0; i < num / 26; i++)
                sb.Insert(0, 'Z');
            sb.Insert(0, (char)(num % 26 + 64));
        }   
        return sb.ToString();
    }
}
1
 Аватар для ata
269 / 253 / 186
Регистрация: 28.10.2015
Сообщений: 723
26.01.2017, 15:54
Фактически речь идет о 26-ричной системе счисления. Поэтому самый простой путь - переводить строку в число, увеличивать и переводить обратно в строку. Или представлять число в виде массива байтов, а из строки в массив и из массива в строку тоже переводить двумя функциями. Строки вообще не подходят для их изменения, они иммутабельны.
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
27.01.2017, 12:02  [ТС]
Pikemaster, а если исходная строка AZZ, то результат BZZ, вместо BAA.
0
309 / 309 / 215
Регистрация: 24.09.2013
Сообщений: 771
27.01.2017, 12:45
Stick, невнимательно прочитал задание.
Видимо тогда лучше использовать метод, который предложил ata.

Добавлено через 21 минуту
Stick, хотя можно и так
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
static string Increment(string target, int num)
{
    StringBuilder sb = new StringBuilder(target);
    for (int i = 0; i < num; i++ )
    {
        if (sb[sb.Length - 1] == 'Z')
        {
            sb[sb.Length - 1] = 'A';
            for (int j = sb.Length - 2; j >= 0; j--)
            {
                if (sb[j] < 'Z')
                {
                    sb[j] = (char)(sb[j] + 1);
                    break;
                }
                else
                    sb[j] = 'A';
            }
        }
        else 
            sb[sb.Length - 1] = (char)(sb[sb.Length - 1] + 1);
    }
    return sb.ToString();
}
0
 Аватар для ata
269 / 253 / 186
Регистрация: 28.10.2015
Сообщений: 723
28.01.2017, 09:26
Лучший ответ Сообщение было отмечено Stick как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Linq;
using System.Collections.Generic;
 
public class Kata
{
    public static void Main()
    {
        string s = "ZZZ";
        Stack<int> digits = new Stack<int>(s.Length + 1);
        int previous = 1;
        foreach (char ch in s.Reverse())
        {
            int digit = ch - 'A' + previous;
            previous = digit / 26;
            digits.Push(digit % 26);
        }
        if (previous != 0) digits.Push(previous);
        Console.WriteLine(new String(digits.Select(d => (char)(d + 'A')).ToArray()));
    }
}
Код получился почти универсальным. Его чуть-чуть доработать (заменить последнее условие на цикл), и он будет складывать со строкой любые числа. Попробуйте, например, задать s = "AA" и previous = 26.
1
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
31.01.2017, 10:27  [ТС]
ata, изящно получилось!

Добавлено через 11 минут
ata, что-то не получается: если взять s = "Z" и previous = 3 получаю BC, вместо АС
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
31.01.2017, 10:45
C#
1
if (previous != 0) digits.Push(previous - 1);
2
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
31.01.2017, 11:18  [ТС]
Можно ли сравнить в лексикографическом порядке строки "BE" и "BDDD". И при этом узнать какая строка меньше?
C#
1
2
3
4
5
6
7
8
if (String.CompareOrdinal("BE", "BDDD") != 1)
{
   // BE меньше
}
else
{
   // BDDD больше
}
не слишком помогает это условие.
0
Эксперт .NET
 Аватар для Usaga
14140 / 9369 / 1350
Регистрация: 21.01.2016
Сообщений: 35,270
31.01.2017, 11:22
Stick, CompareOrdinal возвращает отрицательное число, 0 и положительное число. Твоё сравнение бессмысленно.
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
31.01.2017, 11:50  [ТС]
Usaga, есть ли класс или метод который мне поможет?
0
Эксперт .NET
 Аватар для Usaga
14140 / 9369 / 1350
Регистрация: 21.01.2016
Сообщений: 35,270
31.01.2017, 11:57
Stick, да, это - String.CompareOrdinal.
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
31.01.2017, 12:44  [ТС]
Usaga, все ясно! Для понимания не хватало плотного обеда
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.01.2017, 12:44
Помогаю со студенческими работами здесь

При клике инкремент значения value определенного input id которого считываем через .html
Доброго дня уважаемое сообщество. Помогите пожалуйста с такой проблемой. У меня выводятся товары блоками, добавляю к каждому кнопку...

Массивы. Найти максимальные и минимальные значения. В строках, где находятся искомые значения все значения обратить в ноль и вернуть номер строки
Всем привет! Вот такая задачка: Ввести двумерный массив 5х6. Найти максимальные и минимальные значения. В строках, где находятся искомые...

нужно построить вектор В, где В(i) - число элементов i-ой строки, значения которых меньше заданного значения.
помогите подалуйста сделать прогу! нужно построить вектор В, где В(i) - число элементов i-ой строки, значения которых меньше заданного...

Вычитание значения одной строки из значения другой
Есть таблица. Мне нужно посчитать Value1(значение за одно время, например, 15:00)-Value2(значение за другое время - 06:00) для всех...

Отсортировать строки массива в порядке увеличения среднего арифметического значения каждой строки
Помогите пожалуйста, написать метод сортировки массива (пункт 3) Задание: 1. Создать двумерный массив целых чисел 2. Наполнить...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru