【问题标题】:Decrement operator and decrement assignment, different behaviour递减运算符和递减赋值,不同的行为
【发布时间】:2020-05-10 14:42:26
【问题描述】:

您好,我们正在做这个编程练习:String doubles

我们想通过详细的解释(如果可能的话,还有更多的例子一步一步)知道为什么这个代码:

using System;
using System.Text;

public static class Kata
{
  public static string Doubles(string str)
  {  
    Console.WriteLine("str: "+str);
    for(int i=0; i<str.Length-1;i++){
      if(str[i]==str[i+1]){
        str=str.Remove(i--,2); //➖➖ operator does not store the modified i value inside i?
        Console.WriteLine("str: "+str);
      }
    }
    return str;
  }
}

行为不同于:

using System;
using System.Text;

public static class Kata
{
  public static string Doubles(string str)
  {  
    Console.WriteLine("str: "+str);
    for(int i=0; i<str.Length-1;i++){
      if(str[i]==str[i+1]){
        str=str.Remove(i,2); 
        Console.WriteLine("str: "+str);
        i-=1; //➖= operator DOES store the modified i value inside i?
      }
    }
    return str;
  }
}

我们已阅读:

编辑:例如使用以下字符串:

zpezyhgwqevkekipkxboraceiehzpvajbjalaymsgvqlepelorhjgznaqtaghusuiypywzthoxasudhterdcwzvgyflmcgbjgfwqvefgmimdnzfsrgcpdqewohehvqlphqyzjvwpnbmpthydaiszcgnealtybeydagjvkndocgibgmxmnadtyxcynidjsxluzxelamjmpaxlfkjvsghmslztxuvevfymnawxwrtmnqinksdiopjwedqlnfqfqjblyfnlzanvybclifrmqfwczavthkdnvimztxucqjirndaediodolnylxkueowazqcdzilusmuimstcgvyrtolwnaxbmirxawfuwulawaeclrabiabhworlvpgrqnamqprwxmzegtrljvzwtlgkametzgnuzrlwawbwbdwgbkelrutpfgoerdmtrmjhlryouvrxkjixpyrpcpqkmfhvnajhfptpvklwcwewyrptmxrpjurafthzirncdtdachdgmtgqhqgtompqfzyuerjrolicsenpqetgedhxupmqsocbmnoebhdlcusbldyrcksjmcrofsyzjgpeqjniahdjlgmqrkoblsjdblmbhogkveotmtetjkfcqlokxudwnqxmcewmbmatosohbxyvxrjyxzuamxrmgyfbhcrhwxjloyxhizwizvhyocjvzeuonpnmazfqyezmpwdfprpyzjtinoxasnculkgitgjvwvjdrnsupdzpqesrlrsymljulsygxioemyzkxkiyvjihroxcnlikloqebavjgqamrusbtiqlzdajiuvdvcmkihcoseiwpxifwapmaxzmalvxqohazilysuvhodnphzfmuhskhqohikfbohgmjyhvrsjwzozgprjwnaioavklbnoyxejvqheypzblrzhcuoaozrmonvjgqwhaqvwuacrokinpekdiqnvwyieribtjpedqjmgznpalerexkdrbpdbkchrfl zzayilnbrcqzfwmelrnufdtobvanohrmeswmxbadvoqdesajsrlgtesvcdlyetpztoqpvbifxyrhnepxzstxcfwvsxjqdlcapdawkrwmeupgiezcuxfvmlszjkvhufenpladmhwhwabcgloeqbrfqpelilrugypcrxevpmbyzljqtxwtozskzbzkpcucmeurauledwueforkpzcmjpjwbtwqixrhdpdeqwhjvwaqfljovqzhswuxpgrmnwnykchkjgeaunvloldyvsyjogvfojyjrijdcgahgkgsdscgbesnusruyekehbwzivilerihkwslmvdodkrlpzrofyafogkhkrckwkcxafisxoasxliwfjtpmjlownxfvylmltngirymgnbhvcynxnymzobnhdwzdohexclhjyiespfvhiwkoyvbhuqkecrbdgzcewznpqdzeuvlhmwoctzwxacghgampdrkuyuwxmyecsgdzkgquhbfqpnwsxujwevlftzbnmzhvsxkzdhqfyidsekydzrpiyxvxfkfdhitjxrdwopedxwlcuqpizpgkznegcfavabpuvmhbojnclsweponyiecmspsinzdcvknhfijoupcvzxbljypmibskriurigwogafoyheyetbhnvogypkrutscqwosfotombgvzjxzvzdchgdqonicxbtmtqznuxemzdpcjkvhbcgmkvbdsdnupgzvoxuqderbhdrpjqaexqjncyvbuwfruptxseuyzcvjoxldugxixzwlspbtwhyzmsicvlywkzqhstkypqbyugrvsiedcacsdvojibyxiptzfgfaeganjngutkdnjghtpthtmdofxywvndvbzvbnhoaklwcruxylklygafybxvnbkafgshgmsclbsrdgezxctfspauwaqmazalrvzmrlsiaenzngxodhgaodhmqslztuahaihsimjlencbgqcavmvseqhwefvawalsygfpj xgqyabgfapldgyhckalodrioecjcaknrygfujuhvyzuxeuqdvoxjcypgrxrdepctfztnsptqpdwxdgxpmwoytodgejdfirseaclfvhtzcsdkzcribdaqwnjpmjmuirolotojliclulasjbdnderbintwtmuzrkdswgnhwsbovsjxotzlqvnjtmkbpopqrvmtwdnwqlgqdwhzmtyjwmrickxafqpgxwyufcgqguxthpeimpwojnhbeijtknhbcqkorunidcoxamfpnpuawkpxqwsmkajkmgnoxbabjfmghwnqsutgesbnxuydsdluzortzvajkjpwythprgbunkaedgmjvmwvzedzgjsrdoefcevcmesfehtzrtxbocadtcmrzscvhmzuxylkwqtqrsqpfhrzubaceyksqufadiozctinexikmblwlsbcbfmxpynstbktnispbfeyqgxctumjgtjnzaguoqkdfqtcmpwdjvufncmvijdvlelzsxumbxbkvbsanuqexialydawolmfnorbetjoukclumjlhntzxdepxplwxgjrwtkbjngoqotnmdeymnroxesurwlmaymrpndrqkwpjmwjlvlmprbqjmbtnrcpkunqvuxhshugyilqbnocnimnhdidbrjgyqhurpmicnwurlrzd P>

我们看到了:

【问题讨论】:

  • str 的值是多少,它们的行为有什么不同?
  • 您使用哪些 .NET 实现(.NET Framework、.NET Core、...)?在 Framework 4 - 4.8 中运行平稳,两个函数在给定输入下的输出是相同的。
  • 向您展示我使用的代码:dotnetfiddle.net/Usxucs 也许您看到了不同。

标签: c# operators


【解决方案1】:

在第一种情况下,i的值发生了变化,但是我们将当前值传递给Remove方法后,如果我们想将新值传递给Remove方法,我们将减量运算符放在前面: --i 或在单独的行上做:

 i--;
 str = str.Remove(i,2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-10
    • 2011-02-16
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 2014-03-21
    相关资源
    最近更新 更多