]> Panopticon :: K&R in Python :: 1.22 長い入力行を折りたたむ

<< 1.21 スペースをTABで置き換える | main | 文字列のスライシング >>

1.22 長い入力行を折りたたむ

プログラミング言語C ANSI規格準拠

問題の意味がわからない。『入力のn文字目までにある最後の非ブランク文字の後で"折りたたむ"』というのはどいういこっちゃ。

python1_22.jpg
こんな感じになればいいんだろうか?

1.22 in C

#include <stdio.h>
#define BUF_SIZE 1024
#define TURN_SIZE 10

int main(void){
	char s[BUF_SIZE];
	int i, j, len;
	int last, space;

	while (fgets(s,BUF_SIZE,stdin)){
		last = space = 0;
		for (i=0;i < strlen(s);i++){
			if (s[i] == ' ') space++;
			else {
				if (last + space >= TURN_SIZE) {
					putchar('\n');
					last=0;
				} else {
					for (j = 0;j < space;j++){
						putchar(' ');
					}
					last+=space;
				}
				space=0;
				putchar(s[i]);
				last++;
			}
		}
	}
	return 0;
}

1.22 in Python?

def eraceSpace(line):
    i=0
    while line[i] == ' ' and i < len(line)-1: 
        i += 1
    line = line[i:]
    i = len(line)-1
    while line[i] == ' ' and i >= 0:
        i -= 1
    line = line[:i]
    return line

TURNSIZE=10
s=raw_input()
last = 0
space = 0
i = 0
for i in range(0,len(s),TURNSIZE):
    line = s[i:i+TURNSIZE]
    line = eraceSpace(line)
    print line

最初からn文字ずつに区切っちゃえばいいんじゃね?と思ったけどぜんぜん違ったヽ(`Д´)ノ行の頭にくるたびに文字を数えなおさなきゃいけないんだなー。

1.22 in Python

def eraceSpace(line):
    i = len(line)-1
    while i >= 0 and line[i] == ' ':
        i -= 1
    line = line[:i+1]
    return line

TURNSIZE = 10
s = raw_input()
start = 0
last = TURNSIZE
end = len(s)
while start < end:
    line = s[start:last]
    print eraceSpace(line)
    start = last
    while start < end and s[start] == ' ':
        start +=1
    last = start + TURNSIZE

こんな感じ?

カテゴリ

Trackback URI

http://www.panopticon.jp/mt/mt-tb.cgi/23

Trackbacks(0)

コメントする