Весь год проебланил, а сейчас сессия начинается, надо как-то закрыть лабы. Препод не берет, насколько мне известно от старших курсов. Крч хелпуйте, с меня симпа <3 Задача: "Дана последовательность, содержащая слова, в каждом из которых от 2 до 10 строчных (маленьких) латинских букв, разделенные запятой, после последнего слова – точка. В каждом слове предложения удалить среднюю букву, если это слово имеет нечетную длину."
Можно вот так. Программа опирается на задание, то есть на то что слова разделены запятыми и что точка обязательно находится в конце последовательности и не проверяет это. Обработку некоторых возможных косяков пользователя добавлять не стал, дабы не лишний раз не усложнять код. Когда создаешь приложение, после 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, но так нагляднее и проще для понимания, как мне кажется) Будут вопросы - спрашивай.
Видимо в строчке result.Append(inputString); У метода Append() должна быть перегрузка, которая принимала бы char, но если у тебя не так то попробуй так: tempString.Append(inputString.ToString()); в обоих местах
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.
вот переделай под свою 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.
Вот попроще. Если подумать можно еще упростить 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(); }
Ребята, вставляйте код в специальное место http://prntscr.com/no0a0e, чтобы выглядело более-менее читабельно
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(); } Код 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(); }
Вот правильный код. Странно, что изначально индекс пропал, хз как так) 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(); } Код 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(); }