C# 在不使用反转函数的情况下反转给定字符串
我想在不使用c#中的字符串函数的情况下反转给定的字符串C# 在不使用反转函数的情况下反转给定字符串,c#,string,C#,String,我想在不使用c#中的字符串函数的情况下反转给定的字符串 例如:我有“欢迎来到这个世界”我想要这样的反面:“欢迎来到这个世界”这可以使用LINQ非常容易地完成,如下所示: string str = "Welcome to the world"; string[] arr = str.Split(' ').Reverse().ToArray(); Console.WriteLine(string.Join(" ",arr)); //Prints "world the to welcome"
例如:我有“欢迎来到这个世界”我想要这样的反面:“欢迎来到这个世界”这可以使用LINQ非常容易地完成,如下所示:
string str = "Welcome to the world";
string[] arr = str.Split(' ').Reverse().ToArray();
Console.WriteLine(string.Join(" ",arr)); //Prints "world the to welcome"
/**在不使用C#内置函数的情况下反转句子
(除了String.Length属性,我不会为这个小功能编写代码)*/
const char EMPTYCHAR='';
常量字符串EMPTYSTRING=“”;
///
///颠倒一个连续的句子
///
///
///
公共字符串反向限制(字符串pStr)
{
if(pStr.Length>1)//可以通过验证进行检查/限制
{
string strReversed=string.Empty;
字符串[]strsplited=新字符串[pStr.Length];
int i;
strsplited=Split(pStr);//直到这里的复杂性O(n)
对于(i=strsplited.Length-1;i>=0;i--)
//这个for循环在O(n)中添加O(字符串的长度),它类似于O(n)
{
strReversed+=strsplited[i];
}
返回strReversed;
}
返回pStr;
}
///
///将字符串拆分为单词和空格
///
///
///
公共字符串[]拆分(字符串str)
{
string strTemp=string.Empty;
string[]strArryWithValues=新字符串[str.Length];
int j=0;
int countSpace=0;
//结果为O(n)的条件的复杂性
foreach(char-ch-in-str)
{
如果(!ch.Equals(EMPTYCHAR))
{
strTemp+=ch;//向strTemp追加字符
如果(计数空间>0)
{
strArryWithValues[j]=ReturnSpace(countSpace);//插入带空格的字符串
j++;
countSpace=0;
}
}
其他的
{
countSpace++;
if(countSpace==1)
{
strArryWithValues[j]=strTemp;//插入带单词的字符串
strTemp=String.Empty;
j++;
}
}
}
strArryWithValues[j]=strTemp;
返回值(strArryWithValues);
}
///
///返回带有空格数的字符串(作为参数传递)
///
///
///
公共字符串返回空间(整数计数)
{
string strSpaces=string.Empty;
而(计数>0)
{
strSpaces+=清空字符串;
计数--;
}
返回strSpaces;
}
/************倒装句结束***************/
使用Regex
es:-)
请注意,Regex
(es)不是System.String
class:-):-(它们是System.Text.RegularExpressions.Regex
)无效,但是
public string GetReversedWords(string source)
{
var word = new StringBuilder(source.Length);
var result = new StringBuilder(source.Length);
var first = true;
foreach (var c in source.Reverse())
{
if (c.IsWhiteSpace)
{
first = WriteReverseWord(result, word, first);
word.Clear();
continue;
}
word.Append(c);
}
WriteReverseWord(result, word, first);
return result.ToString();
}
private static bool WriteReverseWord(
StringBuilder output,
StringBuilder word,
bool first)
{
if (word.Length == 0)
{
return first;
}
if (!first)
{
output.Append(' ');
}
for (var i = word.Length -1; i > -1; i--)
{
output.Append(word[i]);
}
return false;
}
这是一个面试问题还是一项任务……请注意,你可能会得到的是“欢迎世界”:-)请展示你迄今为止的努力。为免费问题做家庭作业是不受欢迎的,尤其是那些琐碎的问题。好吧,你可以通过摩擦棍子来生火,但是当你有一个装有各种火柴的干燥背包时,你为什么要这么做呢,打火机和火焰喷射器随时都在你身边?你应该在标题
中写作业,而不使用字符串函数:-)拆分/连接实际上是反向字符串。反向?@PaulZahra no,它的IEnumerable.reverse()
,string
碰巧实现了IEnumerable
。我猜OP的练习/挑战/作业是直接处理字符串数据结构,而不是使用任何其他方法(他可能不知道Regex
也可以这样做)。@KingKing然后告诉我们,当你想要建立一些规则时,重要的是要确定具体的规则是什么:-)
var str = "Welcome to the world";
var parts = System.Text.RegularExpressions.Regex.Split(str, " ");
Array.Reverse(parts);
var sb = new StringBuilder();
foreach (var part in parts)
{
sb.Append(part);
sb.Append(' ');
}
if (sb.Length > 0)
{
sb.Length--;
}
var str2 = sb.ToString();
public string GetReversedWords(string source)
{
var word = new StringBuilder(source.Length);
var result = new StringBuilder(source.Length);
var first = true;
foreach (var c in source.Reverse())
{
if (c.IsWhiteSpace)
{
first = WriteReverseWord(result, word, first);
word.Clear();
continue;
}
word.Append(c);
}
WriteReverseWord(result, word, first);
return result.ToString();
}
private static bool WriteReverseWord(
StringBuilder output,
StringBuilder word,
bool first)
{
if (word.Length == 0)
{
return first;
}
if (!first)
{
output.Append(' ');
}
for (var i = word.Length -1; i > -1; i--)
{
output.Append(word[i]);
}
return false;
}