Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在C语言中,有没有一种方法可以分别用另一个集合替换一个字符集合?_.net_Regex_String_Replace - Fatal编程技术网

.net 在C语言中,有没有一种方法可以分别用另一个集合替换一个字符集合?

.net 在C语言中,有没有一种方法可以分别用另一个集合替换一个字符集合?,.net,regex,string,replace,.net,Regex,String,Replace,在C中是否有一种方法可以分别用另一个集合替换字符集合,如下所示: "ABCDEF.KindOfReplace( "AE", "12"); // the result: "1BCD2F" 不,不是直接的。您必须使用字符串原语或正则表达式自己构建它 一个简单的实现可以是: public static string KindOfReplace(this string original, string charsToReplace, string replacements) { var rep

在C中是否有一种方法可以分别用另一个集合替换字符集合,如下所示:

"ABCDEF.KindOfReplace( "AE", "12"); // the result: "1BCD2F"

不,不是直接的。您必须使用字符串原语或正则表达式自己构建它

一个简单的实现可以是:

public static string KindOfReplace(this string original, string charsToReplace, string replacements)
{
    var replacementDic = charsToReplace.Select((ch,i) => new { ch, i }).ToDictionary(x => x.ch, x => replacements[x.i]);
    var result = original.Select(ch => replacementDic.ContainsKey(ch) ? replacementDic[ch] :ch);
    return new String(result.ToArray());
}

以上是一个示例,请记住为相同长度的字符串等添加保护。

否,不是直接添加。您必须使用字符串原语或正则表达式自己构建它

一个简单的实现可以是:

public static string KindOfReplace(this string original, string charsToReplace, string replacements)
{
    var replacementDic = charsToReplace.Select((ch,i) => new { ch, i }).ToDictionary(x => x.ch, x => replacements[x.i]);
    var result = original.Select(ch => replacementDic.ContainsKey(ch) ? replacementDic[ch] :ch);
    return new String(result.ToArray());
}

上面是一个示例,请记住为相同长度的字符串等添加保护。

没有,但在我看来,您的代码相当于:

var myString = "ABCDEF";
var newString = myString.Replace("A", "1").Replace("E", "2");
您可能会编写一个扩展方法,使其更好,但对于大型替换阵列,它不会特别有效

编辑:


正如下面的评论所指出的,在需要替换大量字符串/字符的情况下,您可以使用StringBuilder。

没有,但在我看来,您的代码相当于:

var myString = "ABCDEF";
var newString = myString.Replace("A", "1").Replace("E", "2");
public static string KindOfReplace( this string src, string find, string repl)
{
    char[] target = src.ToCharArray();
    char[] findChars = find.ToCharArray();
    int finder = src.IndexOfAny(findChars);
    while(finder>-1)
    {
        int charFind = find.IndexOf(src[finder]);
        target[finder] = repl[charFind];
        finder = src.IndexOfAny(findChars, finder+1);
    }
    return new String(target);
}   
您可能会编写一个扩展方法,使其更好,但对于大型替换阵列,它不会特别有效

编辑:


正如下面的评论所指出的,在需要替换大量字符串/字符的情况下,可以使用StringBuilder。

没有现成的功能。如果你手工制作一些东西,这可能是许多可能的解决方案之一。
public static string KindOfReplace( this string src, string find, string repl)
{
    char[] target = src.ToCharArray();
    char[] findChars = find.ToCharArray();
    int finder = src.IndexOfAny(findChars);
    while(finder>-1)
    {
        int charFind = find.IndexOf(src[finder]);
        target[finder] = repl[charFind];
        finder = src.IndexOfAny(findChars, finder+1);
    }
    return new String(target);
}   
它操纵一个字符数组并使用来查找要替换的字符

public static string KindOfReplace( this string src, string find, string repl)
{
    char[] target = src.ToCharArray();
    char[] findChars = find.ToCharArray();
    int finder = src.IndexOfAny(findChars);
    while(finder>-1)
    {
        int charFind = find.IndexOf(src[finder]);
        target[finder] = repl[charFind];
        finder = src.IndexOfAny(findChars, finder+1);
    }
    return new String(target);
}   

没有现成的功能。如果你手工制作一些东西,这可能是许多可能的解决方案之一。 它操纵一个字符数组并使用来查找要替换的字符

public static string KindOfReplace( this string src, string find, string repl)
{
    char[] target = src.ToCharArray();
    char[] findChars = find.ToCharArray();
    int finder = src.IndexOfAny(findChars);
    while(finder>-1)
    {
        int charFind = find.IndexOf(src[finder]);
        target[finder] = repl[charFind];
        finder = src.IndexOfAny(findChars, finder+1);
    }
    return new String(target);
}   

如果集合较大,则使用StringBuilder而不是String。如果集合较大,则使用StringBuilder而不是String。在这里使用Linq不是我的第一选择,但我喜欢巧妙的方法,因为String只是字符的可枚举项,这似乎是最简单的方法:-在这里使用Linq不是我的第一选择,但我喜欢聪明的方法,因为字符串只是字符的一个可枚举项,这似乎是最简单的方法:-