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"

我想在不使用c#中的字符串函数的情况下反转给定的字符串


例如:我有“欢迎来到这个世界”我想要这样的反面:“欢迎来到这个世界”

这可以使用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;
}