2016-09-27 3 views
0

Что касается моего требования, я хочу изменить новый формат строк. На основе ниже формата.Как изменить формат строки строки в C#?

E.g: 
______________ 
|Test-A  | 
| ...  + 
|Test-Z  | ==>IF Test-Z then Next time i need to create Revision "AA" 
| ...  + 
|Test-AA  | 
| ...   + 
|Test-AZ  |==>IF Test-AZ then Next time i need to create Revision "BA" 
| ...   + 
|Test-BA  | 
| ...   + 
|Test-BZ  |==>IF Test-BZ then Next time i need to create Revision "CA" 
| ...   + 
|Test-CA  | 
| ...   + 
|Test-CZ  |==>IF Test-CZ then Next time i need to create Revision "DA" 
+_____________+ 

E.g2 :

A, B .... Z & AA, BB .... AZ тогда мне нужно изменить BA ... BB, BC .... BZ & CA , CB .... CZ.

Пожалуйста, помогите мне решить эту задачу.

+1

что вы хотите? где испробован код? – Imad

+0

Первоначальная версия «A» будет храниться в SQL DB. Например. Название отдела - «Тест», уже вставленный в БД, а ревизия - «А». второй раз такое же название отдела подходит как «Тест». Итак, на этот раз мне нужно создать новую ревизию, такую ​​как «B». – Dhamo

+0

Если такое же название отдела появится как 26 раз, мне нужно изменить версию как «Z». – Dhamo

ответ

1

Я думаю, что вам нужно два способа сделать это: 1 .: A Строка для метода Integer, который возвращает вам номер, где вы можете добавить 1. 2 .: метод, который преобразует обратно число в строку ,

Я в настоящее время на моем планшете, так вот только некоторый непроверенный код:

private int StringToInt(string version) 
{ 
    int returnValue =0; 
    // Iterate through the given string char by char and convert it to an integer 
    // (A=65 in the ascii table, therefore we nned to substract it) 
    for(int i=0; i<version.Length;i++) 
    { 
     // The alphabet has 26 chars so we just think of your version 
     // as a base26 number and convert it to a base10 number. 
     retunValue+=Math.Pow(26,i)*((int)version[version.Length-1-i]-65); 
    } 
    return returnValue; 
} 

и

private string IntToSting(int value) 
{ 
    String returnValue=String.Empty; 
    while(value /26>0) 
    { 
     // % is the modulo operator. eg if value was 27, value%26 == 1 
     returnValue=((char)(value%26+65)).ToString()+returnValue; 
     value-=value%26; 
    } 

    returnValue=((char)(value%26+65)).ToString() +returnValue; 
} 

Обратите внимание, что эти методы работают только заглавные буквы, и что они не обрабатывают специальные случаи, например, IntToString (0);

Теперь вы можете просто использовать его, вызвав методы и добавив 1 к результату StringToInteger перед вызовом IntToString.

version = IntToString(StringToInteger(version)+1); 
+0

ошибка при вызове метода IntToString ----> Ошибка Наилучшее перегруженное соответствие метода для 'string.String (char *)' имеет некоторые недопустимые аргументы – Dhamo

+0

немного изменил код. пожалуйста, попробуйте снова. –

1

Похоже, домашнее задание:

public class RevisionNumber 
{ 
    private static readonly string[] _Representations = new[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; 
    private int _Value; 

    public void Increment() 
    { 
     _Value++; 
    } 

    public override string ToString() 
    { 
     var result = String.Empty; 
     var value = _Value; 

     while (value >= _Representations.Length) 
     { 
      result = _Representations[(int)value % _Representations.Length] + result; 
      value /= _Representations.Length; 
      value--; 
     } 

     return _Representations[(int)value] + result; 
    } 
} 

Использование:

using System; 

namespace ConsoleApplication 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      var revision = new RevisionNumber(); 

      for (int i = 0; i < 100; i++) 
      { 
       Console.WriteLine(revision); 
       revision.Increment(); 
      } 

      Console.ReadKey(); 
     } 
    } 
} 

Соответствующий fiddle is here.

+0

После 'AZ' вы идете в' AAA' - я думаю, что OP хотел 'BA',' BB', 'BC' и т. Д. – Jamiec

+0

Думаю, мне удалось получить еще проще -http: //rextester.com/MJIMV22975 – Jamiec

+0

@ Jamiec: Затем, после 'ZZ', он начинается с' AA' вместо 'AAA' – Oliver