2016-12-20 14 views
2

の文字列を置き換えますか?は、私は、以下の入力を持っているフォーマット文字列

上記の例では、結果はINVXX00056である必要があります。

Xはアルファベットで置き換えることができ、strに5つ以上のアルファベットが含まれている場合、0は整数で置き換えることができます。 str_formatには5つのXしかないので、余分なアルファベットは取り除かれます。同じアルゴリズムが整数に当てはまります。

例2

Dim str_format as string = "XXX00000" 
Dim str as string = "ABCD" 
Dim int as integer = 654321 

期待される結果:ABC54321

プロセス:

1. ABCD XXX00000 654321 
2. ABC DXX000006 54321 
3. AB CDX00065 4321 
4. A BCD00654 321 
5. ABC06543 21 
6. ABC65432 1 
7. ABC54321 
+3

私は宿題のようです。 *宿題の手助けを求める質問には、問題を解決するためにこれまでに行った作業の概要と、問題を解決するための難しさの説明が含まれていなければなりません。 – Spidey

+0

あなたはこれまで何をしていますか? –

+1

自分の好意を持って、Option Strictをオンにしてください – Plutonix

答えて

1

の長さに基づいて条件文を作ることができるだけで、基本的な文字列メソッドを使用して可能な解決策であるとPadLeft/PadRightと、文字列内の特定の文字の出現回数をカウントする特定の方法。フォーマット文字列は、既知の順序でX0のみを含むことができると仮定します。

Public Function CountCharacter(ByVal value As String, ByVal ch As Char) As Integer 
    Return value.Count(Function(c As Char) c = ch) 
End Function 

Public Sub run1() 
    Dim str_format As String = "XXXXX00000" '"XXX00000" 
    Dim str As String = "INV" 
    Dim int As Integer = 56 ' ABC54321 
    Dim xCnt As Integer = CountCharacter(str_format, "X") 
    Dim zCnt As Integer = CountCharacter(str_format, "0") 
    Dim result As String 
    If xCnt > str.Length Then 
     result = str.PadRight(xCnt, "X") 
    Else 
     result = str.Substring(0, xCnt) 
    End If 
    If zCnt > int.ToString().Length Then 
     result = result & int.ToString().PadLeft(zCnt, "0") 
    Else 
     result = result & int.ToString().Substring(int.ToString().Length-zCnt 
    End If 
    Console.WriteLine(result)  
End Sub 

両方のシナリオの出力が期待通りです。

2

スパイダーマンは、上述したように...いくつかのコードを示しています。それは、あなたが描いているプロセスは少し長持ちしていると言いました。

解決策の文字部分は、Left(str,3)を使用してstrの最初の3文字を取得することによって実行できます。これにより、左端の3文字が表示されます。次に、str.Length()を使用して3文字があることを確認します。長さが3未満の場合は、適切な数の「X」を追加します。

数字部分も同様の方法で行うことができます。あなたのintは、実際は上のコードの文字列です。それが実数であれば、それを文字列にキャストすることができます。 Right(int,5)を使用してください。もう一度5桁の数字が表示されているかどうかを確認し、0の数字を適切な数字に追加してください。

問題が発生した場合はコードを投稿してください。

UPDATE

ここに掲載の実際の回答があったように私の解決策Wiktorsの回答に基づいて

Function FormatMyString(str As String, num as String) As String 

    Dim result As String 

    result = Left(str,3).PadRight(3, "X"c).ToUpper() & Right(num,5).PadLeft(5, "0"c) 

    Return result 

End Function 

UPDATE 2

です...私の解決策の修正を行いました異なるフォーマットに対処するために

Function FormatMyString(str As String, num as String, alpha as Integer, digits as Integer) As String 

    Dim result As String 

    result = Left(str, alpha).PadRight(alpha, "X"c).ToUpper() & Right(num, digits).PadLeft(digits, "0"c) 

    Return result 

End Function 

To use... 
FormatMyString("ABCDE", "56",3 5) will return ABC00056 
FormatMyString("ABCDE", "123456",4 3) will return ABCD456 
FormatMyString("AB", "123456",4 3) will return ABXX456 
0

我々はXはわずか3であることを前提としていたようこのサンプル

Dim str_format As String = str_format.Replace("XXX", "ABC") 
Msgbox(str_format) 

を見てみましょう。私はあなたがもっとそれを始めることを望んでいないとすべてが簡単になります。

フォーマットのようなものが私の言い修正であればXの数は、行きますかダウン、あなたはここでは、文字列

関連する問題