Код выводит верный результат в Visual Studio , но некорректный при тестировании на Codewars
public static string calculateString(string calcIt)
{
char[] itterationChars = new char[] { '+', '-', '*', '/','.' };
char currentItteration = '+';
string result = "";
char[] charTemp = calcIt.ToCharArray();
foreach(char temp in charTemp)
{
if (itterationChars.Contains(temp) && temp !='.') currentItteration = temp;
result += (Char.IsDigit(temp))|| itterationChars.Contains(temp)? Convert.ToString(temp) : "";
}
string[] Cleared = result.Split('*','-','+','/');
Cleared[0] = Cleared[0].Replace('.',',') ;
Cleared[1] = Cleared[1].Replace('.', ',');
double first = Double.Parse(Cleared[0]);
double second = Convert.ToDouble(Cleared[1]);
double resultNum = 0;
switch (currentItteration)
{
case '+':
resultNum += first + second;
break;
case '-':
resultNum += first - second;
break;
case '*':
resultNum += first * second;
break;
case '/':
resultNum += first / second;
break;
}
result = "";
result += Convert.ToString((int)resultNum);
return result;
}
Буду рад, если вы поможете мне разобраться почему не проходят тесты codewars, однако все прекрасно работает с теми же аргументами в Visual Studio https://www.codewars.com/kata/56b5dc75d362eac53d000bc8/train/csharp
Ответы (1 шт):
Автор решения: Aziz Umarov
→ Ссылка
Я подредактировал немного код. Думаю все понятно.
public string calculateString(string calcIt)
{
char[] itterationChars = new char[] { '+', '-', '*', '/','.' };
char currentItteration = '+';
string result = "";
char[] charTemp = calcIt.ToCharArray();
foreach(char temp in charTemp)
{
if (Array.Exists(itterationChars, element => element == temp) && temp != '.') currentItteration = temp;
result += (Char.IsDigit(temp)) || Array.Exists(itterationChars,element => element == temp) ? Convert.ToString(temp) : "";
}
string[] Cleared = result.Split('*','-','+','/');
Cleared[0] = Cleared[0].Replace('.',',').Split(',')[0] ;
Cleared[1] = Cleared[1].Replace('.', ',').Split(',')[0];
double first = Double.Parse(Cleared[0]);
double second = Double.Parse(Cleared[1]);
double resultNum = 0;
switch (currentItteration)
{
case '+':
resultNum += first + second;
break;
case '-':
resultNum += first - second;
break;
case '*':
resultNum += first * second;
break;
case '/':
resultNum += first / second;
break;
}
result = "";
result += Convert.ToString((int)resultNum);
return result;
}
изменения коснулись
Cleared[0] = Cleared[0].Replace('.',',').Split(',')[0];
Cleared[1] = Cleared[1].Replace('.', ',').Split(',')[0];
добавил .Split(',')[0]
Заменил itterationChars.Contains(temp)
Array.Exists(itterationChars, element => element == temp)