powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / перевести с паскаля на с++
6 сообщений из 6, страница 1 из 1
перевести с паскаля на с++
    #38633670
nikita7991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
uses crt;
var st, buf, max : string;
 
function isPalind(st:string):boolean;
var i:integer;
begin
    isPalind := true;
    for i:=1 to Length(st) div 2 do if st[i]<>st[length(st)-i+1] then
    begin
        isPalind := false;
        break;
    end;
end;
 
begin
    clrscr;
    write('-> ');
    readln(st);
    max:='';
    buf:='';
    while pos(' ',st)>0 do
    begin
        buf := copy(st,1,pos(' ',st)-1);
        if (buf <> '') and (isPalind(buf)) and (length(buf) > length(max)) then max := buf;
        buf := '';
        delete(st,1,pos(' ',st));
    end;
    if (st<>'') and (isPalind(st)) and (length(st) > length(max)) then max := st;
    writeln('Палиндром наибольшей длины - ',max);
    readln;
end.



Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
перевести с паскаля на с++
    #38634239
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всегда радуют такие вот строки:
Код: pascal
1.
2.
3.
4.
5.
    for i:=1 to Length(st) div 2 do if st[i]<>st[length(st)-i+1] then
    begin
        isPalind := false;
        break;
    end;


Да тут же визуально даже с подсветкой синтаксиса ничего не понятно... приходится в каждую букву вдумываться что бы понять что к чему зачем так жёстко строки экономить?
Код: pascal
1.
2.
3.
4.
5.
6.
    for i:=1 to Length(st) div 2 do 
        if st[i]<>st[length(st)-i+1] then
        begin
            isPalind := false;
            break;
        end;



Вот одна строка... ОДНА!!! А уже в разы легче читается :)

В с++ мне например не удобно работать со строками (там в этом плане конструкции сложные и требуют подключение доп. библиотек). Например в string.h там нету функции strip (или аналога), что не очень удобно :)

Могу изобразить решение на питоне (если вдруг понадобится :) )
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
#!/usr/local/bin/python2.7
# -*- coding: utf-8 -*-
    
st = raw_input("Введите строку: ")
mx = 0
for i in st.split(" "):
  mx = len(i) if i==i[::-1] and mx<len(i) else mx
  
print("Палиндром наибольшей длины - "+str(mx))
...
Рейтинг: 0 / 0
перевести с паскаля на с++
    #38634260
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4 строки кода :) А можно ли ещё короче? (сорри за оффтоп).
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
#!/usr/local/bin/python2.7
# -*- coding: utf-8 -*-
    
mx = 0
for i in raw_input("Введите строку: ").split(" "):
  mx = len(i) if (i==i[::-1] and mx<len(i)) else mx

print("Палиндром наибольшей длины - "+str(mx))



Кстати, а есть ли для c++ всё же библиотеки для более удобной работы со строками, кроме string.h? Возможно ли там так же удобно и коротко работать со строками (мне это интересно, я c++ учу понемногу, потому интересуют возможность облегчения кода, не создавая собственные велики)
...
Рейтинг: 0 / 0
перевести с паскаля на с++
    #38634307
Strangecat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр
4 строки кода :) А можно ли ещё короче? (сорри за оффтоп).


Одна строка:
Код: sql
1.
print("Result - %s" % max([0]+[len(w) for w in raw_input("string: ").split() if w==w[::-1]]))





Програмёр
Кстати, а есть ли для c++ всё же библиотеки для более удобной работы со строками, кроме string.h? Возможно ли там так же удобно и коротко работать со строками (мне это интересно, я c++ учу понемногу, потому интересуют возможность облегчения кода, не создавая собственные велики)
в c++11 есть regexp'ы, в бусте есть Boost String Algorithms Library, но это всё не так удобно.
...
Рейтинг: 0 / 0
перевести с паскаля на с++
    #38634329
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StrangecatОдна строка:
Код: sql
1.
print("Result - %s" % max([0]+[len(w) for w in raw_input("string: ").split() if w==w[::-1]]))




нету предела гениальности )) респект. Пока короче не придумывается (да и не знаю возможно ли) :)
...
Рейтинг: 0 / 0
перевести с паскаля на с++
    #38634419
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрStrangecatОдна строка:
Код: sql
1.
print("Result - %s" % max([0]+[len(w) for w in raw_input("string: ").split() if w==w[::-1]]))




нету предела гениальности )) респект. Пока короче не придумывается (да и не знаю возможно ли) :)

Правильно ли я понимаю, по ресурсам же такой вариант менее затратный:
Код: python
1.
print("Result - %s" % max(len(w) if w==w[::-1] else 0 for w in raw_input("string: ").split()))



Тут генератор, потому лишний список не пишется в память, плюс прогоняется строка один раз, а не 2 (первый формируя список, а второй в функции max).
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / перевести с паскаля на с++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]