C#版本的“;字符串中的最后一个单词不是“反转”;
本文关键字:反转 单词不 字符串 版本 最后一个 | 更新日期: 2023-09-27 18:26:13
这是原始问题link的链接。现在我能够解决那个问题了。但我想在C#中解决同样的问题。我用一种方法解决了这个问题。但当我像在最初的链接问题中那样实现它时,我也面临着同样的问题。
以下是我的一个实现的代码,它解决了C#中的问题,
using System;
namespace CSharpStrings
{
class MyStringManipulators
{
private string input;
private string[] subStrs;
public void GetInputString()
{
Console.WriteLine("Enter string:");
input = Console.ReadLine();
Console.WriteLine(ReverseString(input));
}
public string ReverseString(string input)
{
char[] tempStr = new char[input.Length];
int tempIndex = 0;
for(int i=input.Length-1;i>=0;i--)
{
tempStr[tempIndex] = input[i];
tempIndex++;
}
String newStr = new String(tempStr);
//Console.WriteLine(newStr);
return newStr;
}
public string ReverseWordsInStr()
{
String newStr="";
subStrs = input.Split(' ');
for(int i=0;i<subStrs.Length;i++)
{
subStrs[i] = ReverseString(subStrs[i]);
newStr = newStr + subStrs[i] + " ";
}
//Console.WriteLine(newStr);
return newStr;
}
}
class Program
{
static void Main(string[] args)
{
MyStringManipulators obj = new MyStringManipulators();
obj.GetInputString();
Console.WriteLine(obj.ReverseWordsInStr());
}
}
}
这是另一个版本。这个版本的实现实际上与链接实现中的版本相似。但是,这个链接和原来的链接有同样的问题。但是,这个问题的解决方案在这里行不通。因为我相信C#字符串不是以null结尾的。
using System;
namespace CSharpStringV2
{
class MyStringMan
{
private string input;
public void GetInput()
{
Console.WriteLine("Enter String:");
input = Console.ReadLine();
}
public void ReverseWords()
{
int wordEnd = 0, indexS = 0, indexE = 0;
char[] newStr=new char[input.Length];
while (wordEnd < input.Length)
{
if (wordEnd<input.Length && input[wordEnd] != ' ')
{
wordEnd++;
}
else
{
if (input[wordEnd] == ' ' || wordEnd == input.Length)
{
indexE = wordEnd - 1;
while (indexS < wordEnd)
{
newStr[indexS] = input[indexE];
indexS++;
indexE--;
}
newStr[indexS] = ' ';
indexS++;
}
wordEnd++;
}
}
string nStr = new string(newStr);
Console.WriteLine(nStr);
}
}
class Program
{
static void Main(string[] args)
{
MyStringMan obj = new MyStringMan();
obj.GetInput();
obj.ReverseWords();
}
}
}
我的问题是,我如何使第二个实现工作?我猜它有问题,因为C#字符串没有以'0
终止符结尾。那么,如果可能的话,我该如何进行第二次实现呢?
您错过了最后一个单词,因为wordEnd == input.Length
永远不会变为true,因为在此之前已经退出了while (wordEnd < input.Length)
-循环。
您需要将其更改为while (wordEnd <= input.Length)
,就像您链接的答案一样。
编辑:您还需要将其他部分更改为:
if (wordEnd == input.Length || input[wordEnd] == ' ')
{
indexE = wordEnd - 1;
while (indexS < wordEnd)
{
newStr[indexS] = input[indexE];
indexS++;
indexE--;
}
if (wordEnd < input.Length)
{
newStr[indexS] = ' ';
indexS++;
}
}
我已经修改了您的ReverseWords方法来解决这些问题。
请参阅代码中的修改意见
public void ReverseWords()
{
int wordEnd = 0, indexS = 0, indexE = 0;
char[] newStr = new char[input.Length];
while (wordEnd <= input.Length) //Needed to use <=
{
if (wordEnd < input.Length && input[wordEnd] != ' ')
{
wordEnd++;
}
else
{
//Reversed the conditional checks as the second check
//is an overflow with the last word
if (wordEnd == input.Length || input[wordEnd] == ' ')
{
indexE = wordEnd - 1;
while (indexS < wordEnd)
{
newStr[indexS] = input[indexE];
indexS++;
indexE--;
}
//Added condition to not add a space after the last word
if(wordEnd != input.Length)
newStr[indexS] = ' ';
indexS++;
}
wordEnd++;
}
}
string nStr = new string(newStr);
Console.WriteLine(nStr);
}