Loading...
tsv_tsonev avatar tsv_tsonev 4 Точки

Homework: Operators Expressions and Statements - Problem 6: Four-Digit Number

Здравейте, искам да попитам за малко помощ. Условието на задачата е да се въвете 4 цифрено число, да се направи сбор от цифрите му и да се обаразуват нови числа като се разместят цифрите.

Проблема при мен е, че не успявам да си взема всяка цифра като отделен стринг и след това да я превърна с число. Ползвам следния код:

Console.Write("Enter four-digit number: ");
string strNumber = Console.ReadLine();
string numberA = strNumber [0];
int a = int.Parse(numberA);

като "а" е съответно първата цифра и студиото ми дава грешка, че не мога да конвертирам имплицитно тип "char" в "string". Същата операция я прилагам и за останалите цифри на числото (b, c, d).

Може ли някой да каже къде бъркам в кода и как.

Тагове:
0
Programming Basics 21/01/2016 22:48:20
r3v3nan7 avatar r3v3nan7 365 Точки

Ако искаш пробвай 

int a = (int)strNumber[0]; 

би трябвало да направи от char int направо..

0
justBeOk avatar justBeOk 194 Точки

Проблемът е, че когато взимаш един символ от даден стринг ти се връща char, а не string. Т.е. в твоя случай strNumber[0] ти е равно на първия символ от стринга strNumber, и този символ ти е от тип char, а не от тип string. За да оправиш проблема трябва да напишеш string numberA = strNumber [0].ToString;

1
21/01/2016 22:58:49
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

string numberA = strNumber[0]; трябва да стане на "char numberA = strNumber[0];"

String е тип, който представлява масив от стойности от тип char. Индексатора (къдравите скоби) достъпва стойността на дадената позиция в рам паметта, която е част от конкретния string. Тази част е от типа char и за това VS ти се кара.

Ако string е кошница с домати, а char е домат, не може кошница с домати да е домат. :D

0
r3v3nan7 avatar r3v3nan7 365 Точки

Между другото има и друг вариант. Вместо числото да го правиш низ. Може да използваш модулно делене да ги вземаш числата едно по едно. Примерно:

 

  Console.WriteLine("Enter a number: ");
  int userNumber = int.Parse(Console.ReadLine());

 

  int a = ((userNumber / 1000) % 10);
   int b = ((userNumber / 100) % 10);
    int c = ((userNumber / 10) % 10);
    int d = userNumber % 10;

 

 

0
tsv_tsonev avatar tsv_tsonev 4 Точки

Това с деленето го направих и се получи, но пробвам да го направя и по начина по-който съм описал.

0
r3v3nan7 avatar r3v3nan7 365 Точки

Ами виж този начин

Правиш (char) в (int)

int a = (int)strNumber[0]; 

И после си го правиш string

string a1 =ConvertToString(a);

 

Всъщност това си е твоята идея , но ти искаше направо от char да направиш string и студиото писка. 

Но така както ти го написах би трябвало да няма проблеми :) Ако искаш пробвай :)

0
tsv_tsonev avatar tsv_tsonev 4 Точки

Пробвах го и не ми дава грешка, но като събера отделните цифри на числото, в случая 2011 и вместо 4 ми дава резултат 196, което сигурно е сбор от кодовете на съответното число в ascii таблицата. Това е кода който написах:

Console.Write("Enter four-digit number: ");
        string strNumber = Console.ReadLine();
        int d = (int)strNumber[0];
        string strD = Convert.ToString(d);
        int c = (int)strNumber[1];
        string strC = Convert.ToString(c);
        int b = (int)strNumber[2];
        string strB = Convert.ToString(b);
        int a = (int)strNumber[3];
        string strA = Convert.ToString(a);
        int sum = a + b + c + d;

        Console.WriteLine(sum);
        Console.WriteLine(strD + strC + strB + strA);
        Console.WriteLine(strD + strA + strB + strC);
        Console.WriteLine(strA + strC + strB + strD);

0
21/01/2016 23:31:01
Ivanov.Ivan avatar Ivanov.Ivan Trainer 558 Точки

По принцип стринга може да се разгледа като масив от чарове. Има няколко варианта да се вземат числовите стойности:

примерно:

string str = "1122";

int a = (int)(str[0] - '0'); // ако погледнеш ASCII таблицата, ще видиш, че разликата от ASCII стойността на някое число и '0' е самото число примерно '1' (Ascii - 49) - '0'(Ascii - 48) ще ти даде 1;

Друг вариант е да разгледаш пропъртитата на типа char. Там ще откриеш char.GetNumericValue()

int b = (int)char.GetNumericValue(str[1]);

Общо взето поупражнявай и двата начина. Надявам се да съм ти помогнал.

В тази задача може да използваш:

string str = Console.ReadLine();
            int sum = 0;

            for(int i = 0; i < str.Length; i++)
            {
                sum += (int)char.GetNumericValue(str[i]);
            }

            Console.WriteLine(sum);

 

1
22/01/2016 09:14:27
valiopetev avatar valiopetev 1 Точки

Колега, аз ползвах Char.GetNumericValue. Получава се без проблем.

        Console.Write("Number: ");
        string number = Console.ReadLine();
        int numberA = (int)Char.GetNumericValue(number[0]);
        int numberB = (int)Char.GetNumericValue(number[1]);
        int numberC = (int)Char.GetNumericValue(number[2]);
        int numberD = (int)Char.GetNumericValue(number[3]);

0
agoranov avatar agoranov 12 Точки

Виждам, че колигите са дали доста възможности за решение. Аз бих дал малко по-прости (без неща които са за малко по високо от началното ниво).

Първият вариант: 

int input = int.Parse(Console.ReadLine());
            int thousends = input / 1000;
            input = input % 1000;
            int hundrets = input / 100;
            input = input % 100;
            int tens = input / 10;
            int numbers = input % 10; 

Вторият вариант, ако искаш да използваш char:

(малко copy-paste от примера на колегата задал въпроса)

Console.Write("Enter four-digit number: ");
            string strNumber = Console.ReadLine();
            char numberA = strNumber[0];
            int thousends = numberA - '0';

 

Надявам се да съм бил полезен.

1
r3v3nan7 avatar r3v3nan7 365 Точки

Разбира се, че е полезно :) Колкото повече варианти толкова по-добре. Научават се много нови неща и човек сам си избира кое му е най-удобно да използва :) Но като цяло и аз научих сега нови неща и вероятно не съм единствен :) 

0
bonevp avatar bonevp 1 Точки

Колега, често ползвам конструкцията:

char[] number = Console.ReadLine().ToArray();
int A = number[0] - '0';

int B = number[1] - '0';

int C = number[2] - '0';

int D = number[3] - '0';

За целите на задачата, така би трябвало да пишеш най-малко код. Успех с домашните.

0
tsv_tsonev avatar tsv_tsonev 4 Точки

Задачата се получи като ползвам Char.GetNumericValue, но възникна друга дилема. В условието 4-цифренето число е представено като "abcd" в общия случай и за да се получат верни разместванията, които се искат при мен получавам, че символ "а" трябва да е последното число (при 2011, "а" = 1), а според мен както е записано в условието "а" трябва да е първото число "а" =  2 при 2011, но това е въпрос вече на уточнение на задачата.

Благодаря на всички отзовали се за решаването на проблема и успех за напред.

0
23/01/2016 15:43:06
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.