Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / перевести с паскаля на с++ / 6 сообщений из 6, страница 1 из 1
05.05.2014, 18:42
    #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
06.05.2014, 11:04
    #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
06.05.2014, 11:13
    #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
06.05.2014, 11:41
    #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
06.05.2014, 11:49
    #38634329
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевести с паскаля на с++
StrangecatОдна строка:
Код: sql
1.
print("Result - %s" % max([0]+[len(w) for w in raw_input("string: ").split() if w==w[::-1]]))




нету предела гениальности )) респект. Пока короче не придумывается (да и не знаю возможно ли) :)
...
Рейтинг: 0 / 0
06.05.2014, 12:37
    #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]