Загрузка...

Задача на шарпе, сессия близко

Тема в разделе C# создана пользователем DRINGLETHER 13 май 2019. 395 просмотров

  1. DRINGLETHER
    DRINGLETHER Автор темы 13 май 2019 чел из инета 59 16 фев 2019
    Весь год проебланил, а сейчас сессия начинается, надо как-то закрыть лабы. Препод не берет, насколько мне известно от старших курсов. Крч хелпуйте, с меня симпа <3
    Задача: "Дана последовательность, содержащая слова, в каждом из которых от 2 до 10 строчных (маленьких) латинских букв, разделенные запятой, после последнего слова – точка. В каждом слове предложения удалить среднюю букву, если это слово имеет нечетную длину."
     
  2. tounakker
    tounakker 13 май 2019 10 8 окт 2018
    Можно вот так. Программа опирается на задание, то есть на то что слова разделены запятыми и что точка обязательно находится в конце последовательности и не проверяет это. Обработку некоторых возможных косяков пользователя добавлять не стал, дабы не лишний раз не усложнять код.

    Когда создаешь приложение, после using System; вставь:
    using System.Text;

    Далее метод main меняешь на такой:

    static void Main(string[] args)
    {
    int i = 0;
    bool stopFlag = false;
    string inputString;
    StringBuilder tempString = new StringBuilder("");
    StringBuilder result = new StringBuilder("");
    bool isCorrect = false;

    Console.WriteLine("Enter the sequence:");
    do
    {
    inputString = Console.ReadLine();
    if (String.IsNullOrEmpty(inputString))
    {
    Console.WriteLine("Sequence is empty. Try again:");
    }
    else isCorrect = true;
    } while (!isCorrect);


    while (!stopFlag && i < inputString.Length)
    {
    switch (inputString)
    {
    case '.':
    {
    stopFlag = true;
    goto case ',';
    }
    case ',':
    {
    if (tempString.Length >= 2 && tempString.Length % 2 != 0)
    {
    tempString.Remove((tempString.Length - 1) / 2, 1);
    }
    result.Append(tempString);
    result.Append(inputString);
    tempString.Clear();
    break;
    }
    default:
    {
    tempString.Append(inputString);
    break;
    }
    }
    i++;
    }

    Console.WriteLine("Now sequence is:\n" + result.ToString());
    Console.Read();
    }

    Конечно, можно было использовать split, но так нагляднее и проще для понимания, как мне кажется) Будут вопросы - спрашивай.
     
  3. DRINGLETHER
    DRINGLETHER Автор темы 13 май 2019 чел из инета 59 16 фев 2019
    tounakker, не робит, трабл с кейсом
    "Не удается неявно преобразовать тип "char" в "string""
     
  4. tounakker
    tounakker 13 май 2019 10 8 окт 2018
    DRINGLETHER, с каким именно кейсом? В каком месте показывает преобразование?
     
  5. DRINGLETHER
    DRINGLETHER Автор темы 13 май 2019 чел из инета 59 16 фев 2019
  6. tounakker
    tounakker 13 май 2019 10 8 окт 2018
    Видимо в строчке result.Append(inputString);
    У метода Append() должна быть перегрузка, которая принимала бы char, но если у тебя не так то попробуй так:
    tempString.Append(inputString.ToString());
    в обоих местах
     
  7. tounakker
    tounakker 13 май 2019 10 8 окт 2018
    А вообще у меня в VS 2019 работает и первоначальный вариант
     
  8. wockthardseller
    uses crt;
    const m=30;
    const n=10;
    var i,j:integer;
    c:char;
    a:array[1..m,1..n] of char;
    fl,error_n:boolean;
    begin
    for i:=1 to m do
    for j:=1 to n do
    a[i,j]:=' ';
    j:=1; i:=0; c := '1'; error_n := false;
    writeln('Введите от 2-х до',m,'слово длинной не болеее 10 символов. В конце поставьте точку.');
    while c <> '.' do
    begin
    inc(i);
    read(c);
    while c = ' ' do read(c);
    while (c <> ' ') and (c <> '.') do
    begin
    a[i,j] := c;
    read(c);
    inc(j);
    end;
    if j = 2 then error_n := true;
    j := 1;
    end;
    if error_n then writeln(', Ошибка!!! Присутствуют слова, длина которых меньше 2');
    if i = 1 then writeln ('Ошибка!!! Кол-во слов меньше 2');
    readln;
    if error_n or (i = 1) then writeln('Имеются ошибки. Перезапустите программу и введите корректные данные')
    else
    for i:=2 to m do
    begin
    fl:=true;
    j := 1;
    while ((a[i,j] <> ' ')and (a[i,1]<>' ')) and fl do
    begin
    if a[i,j] <> a[1,j] then fl := false;
    inc(j);
    end;
    if (a[i,j] <> ' ')or (a[1,j]<>' ') then fl := false;
    j := 1;
    if not fl then
    begin
    while a[i,j+1] <> ' ' do inc(j);
    for j:=j to n-1 do a[i,j]:=a[i,j];
    for j:=1 to n do write(a[i,j]);
    end;
    end;
    end.
     
  9. wockthardseller
    вот переделай под свою
    uses crt; // предложение на слова
    var t:string;
    i,k,n:integer;
    a:array[1..100] of string;
    begin
    ReadLn(t); k:=0; t:=t+' '; n:=0;
    for i:=1 to Length(t) do
    if t>='0' then k:=k+1
    else if k<>0 then begin inc(n);
    a[n]:=Copy(t,i-k,k); WriteLn(a[n]); k:=0 end;
    for i:=1 to n do
    WriteLn(a);
    ReadLn
    end.
     
  10. tounakker
    tounakker 13 май 2019 10 8 окт 2018
  11. tounakker
    tounakker 13 май 2019 10 8 окт 2018
  12. DRINGLETHER
    DRINGLETHER Автор темы 13 май 2019 чел из инета 59 16 фев 2019
    tounakker, через 5 мин чекну
     
  13. Sm1Len
    Sm1Len 13 май 2019 Заблокирован(а) 1 28 мар 2017
    Вот попроще. Если подумать можно еще упростить
    static void Main(string[] args)
    {
    string inputString;
    StringBuilder tempString = new StringBuilder("");
    StringBuilder result = new StringBuilder("");
    bool isCorrect = false;

    Console.WriteLine("Enter the sequence:");
    do
    {
    inputString = Console.ReadLine();
    if (String.IsNullOrEmpty(inputString))
    {
    Console.WriteLine("Sequence is empty. Try again:");
    }
    else isCorrect = true;
    } while (!isCorrect);

    string str = inputString.Remove(inputString.Length-1, 1); //Удаляем точку в конце

    var arr = str.Split(','); //Разделяем на массив
    foreach (var s in arr)
    {
    //Console.WriteLine(s);
    if (s.Length >= 2 && s.Length % 2 != 0)
    {
    string newstring = s.Remove((s.Length - 1) / 2, 1);
    result.Append(newstring + ',');
    }
    else result.Append(s + ',');
    }
    result.Remove(result.Length - 1, 1); //Удаляем запятую в конце

    Console.WriteLine("Now sequence is:\n" + result.ToString());
    Console.Read();
    }
     
  14. DRINGLETHER
    DRINGLETHER Автор темы 13 май 2019 чел из инета 59 16 фев 2019
    tounakker, просто заменил case '.' на case "." - заработало :kek:
     
  15. Tuco
    Tuco 13 май 2019 Субъективная критика 554 19 авг 2018
    Ребята, вставляйте код в специальное место http://prntscr.com/no0a0e, чтобы выглядело более-менее читабельно
     
  16. Tuco
    Tuco 13 май 2019 Субъективная критика 554 19 авг 2018
    Sm1Len,
    Код
    static void Main(string[] args)
    {
    string inputString;
    StringBuilder tempString = new StringBuilder("");
    StringBuilder result = new StringBuilder("");
    bool isCorrect = false;

    Console.WriteLine("Enter the sequence:");
    do
    {
    inputString = Console.ReadLine();
    if (String.IsNullOrEmpty(inputString))
    {
    Console.WriteLine("Sequence is empty. Try again:");
    }
    else isCorrect = true;
    } while (!isCorrect);

    string str = inputString.Remove(inputString.Length-1, 1); //Удаляем точку в конце

    var arr = str.Split(','); //Разделяем на массив
    foreach (var s in arr)
    {
    //Console.WriteLine(s);
    if (s.Length >= 2 && s.Length % 2 != 0)
    {
    string newstring = s.Remove((s.Length - 1) / 2, 1);
    result.Append(newstring + ',');
    }
    else result.Append(s + ',');
    }
    result.Remove(result.Length - 1, 1); //Удаляем запятую в конце

    Console.WriteLine("Now sequence is:\n" + result.ToString());
    Console.Read();
    }
     
  17. DRINGLETHER
    DRINGLETHER Автор темы 13 май 2019 чел из инета 59 16 фев 2019
    ребят, спасибо, спасли мою жёпу. осталось в форму переделать, но с этим я справлюсь:roflanebalo:
     
  18. tounakker
    tounakker 13 май 2019 10 8 окт 2018
    Tuco, о, спасибо за совет)
     
  19. tounakker
    tounakker 13 май 2019 10 8 окт 2018
    DRINGLETHER, мой косяк! Должно быть switch (inputString), а не switch (inputString)!!!
     
  20. tounakker
    tounakker 13 май 2019 10 8 окт 2018
    Вот правильный код. Странно, что изначально индекс пропал, хз как так)
    Код

    static void Main(string[] args)
    {
    int i = 0;
    bool stopFlag = false;
    string inputString;
    StringBuilder tempString = new StringBuilder("");
    StringBuilder result = new StringBuilder("");
    bool isCorrect = false;

    Console.WriteLine("Enter the sequence:");
    do
    {
    inputString = Console.ReadLine();
    if (String.IsNullOrEmpty(inputString))
    {
    Console.WriteLine("Sequence is empty. Try again:");
    }
    else isCorrect = true;
    } while (!isCorrect);


    while (!stopFlag && i < inputString.Length)
    {
    switch (inputString[i])
    {
    case '.':
    {
    stopFlag = true;
    goto case ',';
    }
    case ',':
    {
    if (tempString.Length >= 2 && tempString.Length % 2 != 0)
    {
    tempString.Remove((tempString.Length - 1) / 2, 1);
    }
    result.Append(tempString);
    result.Append(inputString[i]);
    tempString.Clear();
    break;
    }
    default:
    {
    tempString.Append(inputString[i].ToString());
    break;
    }
    }
    i++;
    }

    Console.WriteLine("Now sequence is:\n" + result.ToString());
    Console.Read();
    }
     
Top
Загрузка...