如何让返回值不包含任何标点符号

问题描述 投票:0回答:1

创建一个函数,将任何给定的字符串编码为压缩形式!让函数 RebelEncoding(str) 接受一个字符串参数并返回编码后的字符串,返回值不得包含任何标点符号。

static string RebelEncoding(string str)
{
  
    if (str == null || str == "")
    {
        return str;
    }
    StringBuilder sb = new StringBuilder();
    char prevChar = str[0]; 
    int count = 1;
    for(int i = 1;i < str.Length;i++)
    {
        if (!Char.IsPunctuation(str[i]))
        {
          
            if (str[i] == prevChar)
            {
                count++;
            }
            else
            {
                sb.Append(count);
                sb.Append(prevChar);
                prevChar = str[i];
                count = 1;
            }  
        }
    }
    sb.Append(count);
    sb.Append(prevChar);
    string results = sb.ToString();
    if (results.Length >= str.Length)
    {
       return results;
    }
    return results;

}
static void Main(string[] args)
{
    string results;
    results=RebelEncoding("Squad Beta-111 attack!");
    Console.WriteLine(results);
    Console.ReadLine();
}

我的输出:

1S1q1u1a1d1 1B1e1t1a311 1a2t1a1c1k

所需输出:
1S1q1u1a1d 1B1e1t1a31 1a2t1a1c1k

c# string rle
1个回答
0
投票

由于标点符号位于输入空间中(可能与所有其他字符一起,尽管没有说明)但不在输出空间中,因此您正在将较大的集合映射到较小的集合中。

唯一的解决方案是用多个字符来表示不需要的标点符号。您可以像在许多语言中一样使用转义,例如

\uxxxx
可能代表您不想包含的字符的 Unicode 值,而
\\
代表转义字符反斜杠,或者您可以对每个字符使用多字符编码。

一种常见的多字符编码是 Base64

© www.soinside.com 2019 - 2024. All rights reserved.