Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
C#如何将两位数从字符串读入字符_C# - Fatal编程技术网

C#如何将两位数从字符串读入字符

C#如何将两位数从字符串读入字符,c#,C#,嗨,我知道这可能有点傻。但是我需要将我的字符串转换成一个数字,因此我需要使用char来循环操作符。然而,如果我尝试做一个两位数或更多位数的数字,这个数字就会被分解成一位数。比如说 string str="2+16-42X" char[] ch=str.toCharArray(); 输出为(忽略逗号) 我想得到2,+,16,-42,X 有没有关于如何解决这个问题的建议?谢谢您使用正则表达式: string str="2+16-42X"; var match = Regex.Match(str

嗨,我知道这可能有点傻。但是我需要将我的字符串转换成一个数字,因此我需要使用char来循环操作符。然而,如果我尝试做一个两位数或更多位数的数字,这个数字就会被分解成一位数。比如说

string str="2+16-42X"

char[] ch=str.toCharArray();
输出为(忽略逗号)

我想得到
2,+,16,-42,X
有没有关于如何解决这个问题的建议?谢谢您使用正则表达式:

string str="2+16-42X";

var match = Regex.Match(str, @"(\d+|\D)+");

match.Groups[1].Captures.Cast<Capture>().Select(c => c.Value).ToList();
string str=“2+16-42X”;
var match=Regex.match(str,@“(\d++\d)+”);
match.Groups[1].Captures.Cast().Select(c=>c.Value.ToList();
返回:


2、+、16、、42、X

您可以尝试使用以下代码:

string str = "2+16-42X";

str = str.Replace("+", " +");
str = str.Replace("-", " -");
str = str.Replace("X", " X");

var numbers = str.Split(' ');

foreach (var number in numbers)
{
    Console.WriteLine(number);
}
输出:

2
+16
-42
X

您可以编写一个简单的lexer:

string str="2+16-42X";

StringBuilder currentNumber = new StringBuilder();
List<string> tokens = new List<string>();

foreach(char chr in str) {
    if (Char.IsDigit(chr)) {
        currentNumber.Append(chr);
    }
    else {
        if (currentNumber.Length > 0) {
            tokens.Add(currentNumber.ToString());
            currentNumber.Clear();
        }
        if (chr == '-') {
            currentNumber.Append(chr);
        }
        else {
            tokens.Add(chr.ToString());
        }
    }
}
if (currentNumber.Length > 0) {
    tokens.Add(currentNumber.ToString());
}
string str=“2+16-42X”;
StringBuilder currentNumber=新的StringBuilder();
列表标记=新列表();
foreach(str中的字符chr){
if(字符IsDigit(chr)){
currentNumber.Append(chr);
}
否则{
如果(currentNumber.Length>0){
Add(currentNumber.ToString());
currentNumber.Clear();
}
如果(chr=='-'){
currentNumber.Append(chr);
}
否则{
Add(chr.ToString());
}
}
}
如果(currentNumber.Length>0){
Add(currentNumber.ToString());
}

tokens
列表包含您的数字和符号。

这里是一种正则表达式方法

string str = "2+16-42X";
string[] result = Regex.Matches(str, "-?\\d+|[+/*X]")
                       .Cast<Match>().Select(x => x.Value).ToArray();
string str=“2+16-42X”;
string[]result=Regex.Matches(str,“-?\\d+|[+/*X]”)
.Cast().Select(x=>x.Value).ToArray();
说明:

  • -?
    可选
    -
    开头字符
  • \d+
    一个或多个数字
  • |
  • [+/*X]
    这些字符中的一个
    +
    /
    *
    X

这是因为char=1字节。。。您无法将“16”保存在字符上-这将是一个字符串。。。但是,您可以将16另存为字符上的ascii码……您不能使用
char foo='-42'
char foo='16'
,因此在您的示例中,负数(-)不是运算符,而+是加法。您需要定义规则。您正处于学习解析的开始。不幸的是,这是一个涉及面很广的主题,但这基本上就是你想要做的(同时不知道艺术的词汇)。例如,将字符拆分为逻辑单元的这一位被称为标记化(或词法化)(输出被称为标记)这里有机会澄清规则吗?还是应该因为不清楚而关闭?为什么
+16
被解析为
+
16
其中as
-42
被解析为
-42
?预期的结果是“-42”不是“-”,“42”无论如何,我不明白为什么
-
要和数字一起考虑,但
+
不是
-
是一个运算符,就像
+
@Liam我刚刚写了答案,如果问题错了怎么可能是对的???@Teejay Correct。。但这正是OP想要的,所以也许可以先向他/她澄清,而不是急于给出答案。如果你在问题被修改后发布了它,要么修改你的答案,要么扔掉它。。显然,它改变了背景,这不是你的错,但你的答案不再相关。。。对此无能为力,但要教OP更详细地了解他想要什么……无论如何,我的答案绝对足以达到任何解析目的。但如果他们想否决投票。。。阿门!请大家停止添加错误的答案。。。阅读问题
+16
应该是
+,16
这打印的是“-”,“42”而不是“-42”OP想要的没有多大意义,但对阅读实际问题的人来说,哈利路亚
string str = "2+16-42X";
string[] result = Regex.Matches(str, "-?\\d+|[+/*X]")
                       .Cast<Match>().Select(x => x.Value).ToArray();