Загрузка...

The task is sharp, the session is close

Thread in C# created by DRINGLETHER May 13, 2019. 399 views

  1. DRINGLETHER
    DRINGLETHER Topic starter May 13, 2019 чел из инета 59 Feb 16, 2019
    Весь год проебланил, а сейчас сессия начинается, надо как-то закрыть лабы. Препод не берет, насколько мне известно от старших курсов. Крч хелпуйте, с меня симпа <3
    Задача: "Дана последовательность, содержащая слова, в каждом из которых от 2 до 10 строчных (маленьких) латинских букв, разделенные запятой, после последнего слова – точка. В каждом слове предложения удалить среднюю букву, если это слово имеет нечетную длину."
     
  2. tounakker
    tounakker May 13, 2019 10 Oct 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 Topic starter May 13, 2019 чел из инета 59 Feb 16, 2019
    tounakker, не робит, трабл с кейсом
    "Не удается неявно преобразовать тип "char" в "string""
     
  4. tounakker
    tounakker May 13, 2019 10 Oct 8, 2018
    DRINGLETHER, с каким именно кейсом? В каком месте показывает преобразование?
     
  5. DRINGLETHER
    DRINGLETHER Topic starter May 13, 2019 чел из инета 59 Feb 16, 2019
  6. tounakker
    tounakker May 13, 2019 10 Oct 8, 2018
    Видимо в строчке result.Append(inputString);
    У метода Append() должна быть перегрузка, которая принимала бы char, но если у тебя не так то попробуй так:
    tempString.Append(inputString.ToString());
    в обоих местах
     
  7. tounakker
    tounakker May 13, 2019 10 Oct 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 May 13, 2019 10 Oct 8, 2018
  11. tounakker
    tounakker May 13, 2019 10 Oct 8, 2018
  12. DRINGLETHER
    DRINGLETHER Topic starter May 13, 2019 чел из инета 59 Feb 16, 2019
    tounakker, через 5 мин чекну
     
  13. Sm1Len
    Sm1Len May 13, 2019 Banned 1 Mar 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 Topic starter May 13, 2019 чел из инета 59 Feb 16, 2019
    tounakker, просто заменил case '.' на case "." - заработало :kek:
     
  15. Tuco
    Tuco May 13, 2019 Субъективная критика 554 Aug 19, 2018
    Ребята, вставляйте код в специальное место http://prntscr.com/no0a0e, чтобы выглядело более-менее читабельно
     
  16. Tuco
    Tuco May 13, 2019 Субъективная критика 554 Aug 19, 2018
    Sm1Len,
    Code
    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 Topic starter May 13, 2019 чел из инета 59 Feb 16, 2019
    ребят, спасибо, спасли мою жёпу. осталось в форму переделать, но с этим я справлюсь:roflanebalo:
     
  18. tounakker
    tounakker May 13, 2019 10 Oct 8, 2018
    Tuco, о, спасибо за совет)
     
  19. tounakker
    tounakker May 13, 2019 10 Oct 8, 2018
    DRINGLETHER, мой косяк! Должно быть switch (inputString), а не switch (inputString)!!!
     
  20. tounakker
    tounakker May 13, 2019 10 Oct 8, 2018
    Вот правильный код. Странно, что изначально индекс пропал, хз как так)
    Code

    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
Loading...