Задание: Сформировать по строке a новейшую строчку по правилу: если слово
Задание: Сформировать по строке a новейшую строчку по правилу: если слово имеет нечётную длину, удалить в нём среднюю букву. QBasic
Очерк:
Dim a As String, back As String, B() As String, i As Long, Poz As Long, n As Long
Print "Vvedite stroku";
Input a
back = a: i = 1: n = 1
Do
Poz = InStr(i, a, " ")
if Poz gt; 0 Then n = n + 1 Else Exit Do
i = Poz + 1
Loop
ReDim B(n)
n = 1
Do
Poz = InStr(1, a, " ")
if Poz gt; 0 Then
B(n) = Left(a, Poz - 1)
a = Mid(a, Poz + 1)
Else
Exit Do
End if
Loop
a = ""
For i = 1 To n
If Len(B(i)) Mod 2 = 1 Then B(i) = Left(B(i), (Len(B(i)) - 1)/2) amp; Mid(B(i), (Len(B(i)) + 3)/2)
a = a amp; B(i) amp; " "
Next i
a = Trim(a)
Print "Staraya stroka: " amp; back amp; CHR(13) amp; CHR(10) "Novaya stroka: " amp; a
End
Подскажите)
И если можно исправленный вариант, премного признателен.
1. Разделителями меж словами считаются любые знаки, включенные к константу delim
2. Все символы, не входящие в delim, образуют алфавит (т.е. "буковкы"), из которого может быть составлено каждое слово
3. Количество разделителей, окружающих каждое слово, ограничено только здоровым смыслом. Все разделители будут переданы в строчку результата без изменения.
4. Если слово содержит только один знак, оно не изменяется, несмотря на то, что единица - нечетное число. В неприятном случае такое слово было бы исключено. К тому же, слово длиной в один знак не имеет "средней буковкы"
CONST delim = " .,;:!?-"
DIM s AS STRING, s1 AS STRING, word AS STRING, wd AS STRING
DIM i AS INTEGER, n AS INTEGER, k AS INTEGER
INPUT "Введите строчку: ", s
'Обеспечить наличие пробела за последним словом
IF INSTR(delim, RIGHT(s, 1)) = 0 THEN s = s + " "
'Исходные присваивания
n = LEN(s): s1 = "": i = 1
DO WHILE i lt;= n 'Просматриваем входную строчку знак за эмблемой
'Ищем 1-ый непробельный символ
wd = "" 'qq
DO WHILE (INSTR(delim, MID(s, i, 1)) lt;gt; 0) AND (i lt;= n)
wd = wd + MID(s, i, 1)
i = i + 1
LOOP
'Выделяем очередное слово, за которым следует пробельный знак
word = ""
DO WHILE (INSTR(delim, MID(s, i, 1)) = 0) AND (i lt;= n)
word = word + MID(s, i, 1)
i = i + 1
LOOP
'Найдено ли слово?
k = LEN(word)
IF k gt; 0 THEN 'Если слово найдено
'--- вырезается средний знак при нечетной длине ---
IF (k gt; 1) AND (k MOD 2 lt;gt; 0) THEN
k = (k - 1) \ 2
word = LEFT(word, k) + RIGHT(word, k)
END IF
'----------------------------------------------------
'Добавляем отысканное слово через wd к выходной строке
s1 = s1 + wd + word
END IF
LOOP
PRINT "Результат: " + s1
END
Примеры работы программки:
1. Обыденный текст: слова через один пробел
Введите строчку: А роза упала на лапу Азора
Итог: А роза упла на лапу Азра
2. Использовано больше 1-го пробела и разделители : и !
Введите строчку: Пример 2: Ура! Мы ломим: гнутся шведы!
Итог: Пример 2: Уа! Мы лоим: гнутся швды!
3. Использовано несколько непробельных разделителей подряд
Введите строчку: Пример --3--: Какое небо голубое!...
Итог: Пример --3--: Каое небо голбое!...
-
Вопросы ответы
Статьи
Информатика
Статьи
Разные вопросы.
Қазақ тiлi.
Английский язык.
Математика.
История.
Экономика.
Экономика.
Русский язык.
Разные вопросы.
Математика.