Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / programa na C / 25 сообщений из 40, страница 1 из 2
26.05.2006, 11:17
    #33753511
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
nado napisati pro. catoraia udaliaet vse comentarii v programe napisonai na iazike C.

naprimer:

Код: plaintext
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.
32.
33.
34.
35.
36.
37.
38.
39.
#include <stdio.h> 
 
int main(void)
{
    FILE *in, *out;
    char c;
 
    if ( (in=fopen("a.c","rt")) == NULL )
    {
        fprintf(stderr, "Cannot open input file.\n");
        return  1 ;
    }
 
    // sdfasdfdasf   
 
                                                                         
    if ( (out=fopen("b.c","wt")) == NULL )
    {
        fprintf(stderr, "Cannot open output file.\n");
        return  1 ;
    }
                                                                         
 
    /* 
    asdfdasf 
    asdfasdf 
    asdfasdf 
    asdfasdf 
    */
 
    while ((c=fgetc(in)) != EOF) 
    {
        putchar(c);
    }
 
    fclose(in);
    fclose(out);
 
    return  0 ;
}


v rezulitate doljen poluciti:

Код: plaintext
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.
32.
#include <stdio.h> 
 
int main(void)
{
    FILE *in, *out;
    char c;
 
    if ( (in=fopen("a.c","rt")) == NULL )
    {
        fprintf(stderr, "Cannot open input file.\n");
        return  1 ;
    }
 
   
                                                                         
    if ( (out=fopen("b.c","wt")) == NULL )
    {
        fprintf(stderr, "Cannot open output file.\n");
        return  1 ;
    }
                                                                         
 
   
    while ((c=fgetc(in)) != EOF) 
    {
        putchar(c);
    }
 
    fclose(in);
    fclose(out);
 
    return  0 ;
}

nado napisati na C, ne C++ .. Help
...
Рейтинг: 0 / 0
26.05.2006, 11:21
    #33753536
дед Макар
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
и в чем трудность?
...
Рейтинг: 0 / 0
26.05.2006, 11:25
    #33753549
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
:) neznaiu kak ...

kak i mogu procitati s faila naprimer desiatuiu stroku?
...
Рейтинг: 0 / 0
26.05.2006, 11:28
    #33753560
дед Макар
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
читай построчно с самой первой строки и считай их. Только зачем тебе нужна именно десятая строка? А вдруг комментарий на 11-й строке? Читай построчно весь файл, находи первые символы, проверяй их на пренадлежность к комментарию. Если оно - удаляй, нет - читай дальше....
...
Рейтинг: 0 / 0
26.05.2006, 11:31
    #33753569
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
kak mne citati postrocino, v primere i citaiu posimvolino ... postrocino neznaiu kak ... please previdi primer.
...
Рейтинг: 0 / 0
26.05.2006, 11:33
    #33753580
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
Читаешь с файла посимвольно и паралелльно записываешь в файл вывода с отстованием на один символ
1. Если встречается отрытие многострочного комментария, ставишь флаг(skip), что запсывать не надо.
2. Если встречается однострочный комментарий (ставишь флаг, что надо не надо записывать до конца строки)
3. Если встречается закрытие многострочного комментария и стоит флаг(skip) или прочитан символ конца строки и стот флаг (skip_end_of_file), снимешь флаг(skip/skip_endof_file) и ставишь флаг, что надо пропустить 2 символа (типа int skips_simbols=2)

Если стоит флаг skip символ не пишешь
Если стоит флаг skip_end_of_file символ не пишешь
Елси стоит skip_simbols декриментируешь его и символ не пишешь

Примерно так должно работать.
...
Рейтинг: 0 / 0
26.05.2006, 11:34
    #33753585
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
Открываешь требуемый файл для чтения, создаёшь ещё один новый...
Читаешь первый посимвольно и всё, кроме комментариев, пишешь во вновь созданный, потом давишь первый и переименовываешь второй.
Можно, конечно, и ещё несколько вариантов решения придумать...

Чтобы отсечь комменты - пропускаешь (не пишешь во второй файл) все строки (окончания строк), которые начинаются на // (содержат //) и все символы между комбинациями /* */ ...
...
Рейтинг: 0 / 0
26.05.2006, 11:36
    #33753590
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
Телепатия, однако :)
...
Рейтинг: 0 / 0
26.05.2006, 11:36
    #33753591
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
gdakak mne citati postrocino, v primere i citaiu posimvolino ... postrocino neznaiu kak ... please previdi primer.

Код: plaintext
fgets
...
Рейтинг: 0 / 0
26.05.2006, 11:39
    #33753601
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
Rebeata .. vi mojete perepisati viseucazanii primer .. dlia polucenia corectogo rezulitata? plz
...
Рейтинг: 0 / 0
26.05.2006, 11:40
    #33753608
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
Кстати, при чтении построчно, алгоритм можно сделать больше, но проще (не будет этого дурацкого отслеживания отставания на один символ)
...
Рейтинг: 0 / 0
26.05.2006, 11:42
    #33753617
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
gdaRebeata .. vi mojete perepisati viseucazanii primer .. dlia polucenia corectogo rezulitata? plz

Так примера, то нет. Здесь не заложено ни грамма логики. Напиши свой, или предложи алгоритм
...
Рейтинг: 0 / 0
26.05.2006, 11:47
    #33753650
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
vash algoritm menea ustraivaet vpolmne, vot kak realizovati ego programno, hz
...
Рейтинг: 0 / 0
26.05.2006, 11:48
    #33753654
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
delo v tom 4to na c uje goda 3 nicego nepisal, pozabil kakie tam voobshe functii, vozjnosti
...
Рейтинг: 0 / 0
26.05.2006, 11:55
    #33753679
дед Макар
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
gdadelo v tom 4to na c uje goda 3 nicego nepisal, pozabil kakie tam voobshe functii, vozjnosti

Это как езда на велосипеде - один раз научился - не разучишься. Забыл - для это есть хелп. Трудности в реализации - покажи что есть, что не работает - здесь подскажут. Или просто ЛЕНЬ писать?
...
Рейтинг: 0 / 0
26.05.2006, 11:55
    #33753683
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
gdadelo v tom 4to na c uje goda 3 nicego nepisal, pozabil kakie tam voobshe functii, vozjnosti

Тебе понадобится:
1. три флага: int skip, ...;
2. может еще один флаг, для второй части алгоритма.
Если флаг установлен пиши: skip=1 или 2 взависимости от флаго, не установлен: skip=0;
3. Оператор условия:
Код: plaintext
if (skip== 1 ) { /*здесь код*/}
или
Код: plaintext
if (skip== 1 ) { /*здесь код*/} else {/*здесь код*/}

Вроде все
И еще: отрывай файл лучше в режиме "wb" и "rb"

Столкнешься с трудностями пиши, мы поможем.
...
Рейтинг: 0 / 0
26.05.2006, 12:10
    #33753761
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
gdavash algoritm menea ustraivaet vpolmne, vot kak realizovati ego programno, hz

Да, кстати, жду реализации моего алгоритма. :)
...
Рейтинг: 0 / 0
26.05.2006, 12:20
    #33753795
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
dumaiu :), rezulitat viloju ...
...
Рейтинг: 0 / 0
26.05.2006, 14:20
    #33754379
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
)))

а такой код:

printf("/*Hello!*/, и тут //"); // /*И тут*/


Нормально распарсит?
...
Рейтинг: 0 / 0
26.05.2006, 14:35
    #33754421
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
gardenman)))

а такой код:

printf("/*Hello!*/, и тут //"); // /*И тут*/

Нормально распарсит?

Нет.

1. Задача поставлена для более простого примера
2. Кавычки легко вписываются в представленный алгоритм. Даже для такого случая:
Код: plaintext
1.
printf("bla bla \" bla");
...
Рейтинг: 0 / 0
26.05.2006, 15:26
    #33754615
matan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<?php

	$data = preg_replace(
		'[
			/\*.*?\*/

		]sx', '',
		file_get_contents("file.c")
	);

	$data = preg_replace(
		'[
			//.*
		]mx', '',
		$data
	);

	echo $data;

?>
...
Рейтинг: 0 / 0
26.05.2006, 17:04
    #33755007
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
Код: plaintext
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.
32.
33.
34.
35.
#include <stdio.h>

int main(void)
{
    FILE *in, *out;
    char c;
    
    if ( (in=fopen("a","rb")) == NULL )
    {
	fprintf(stderr, "Cannot open input file.\n");
	return  1 ;
    }
    
 
    
    if ( (out=fopen("b","wb")) == NULL )
    {
	fprintf(stderr, "Can/not open output file.\n");
	return  1 ;
    }   
    

    int skip= 0 ;
    while ((c=fgetc(in)) != EOF)
    {
	if ((c=='/') && ((c=fgetc(in))=='/')) skip =  1 ; 	

	if (skip ==  0 ) fputc(c,out);	
	if (c == '\n') skip =  0 ;
    }
			      
    fclose(in);
    fclose(out);    
    
    return  0 ;
}

Testiruiu na primere:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
//total 18
//-rw-r--r--   1 oracle oinstall    0 2006-05-26 08:00 a
//-rw-r--r--   1 oracle oinstall  379 2006-05-26 08:00 a.c
-rwxr-xr-x    1  oracle oinstall  9271   2006 - 05 - 26   08 : 00  a.outdrwxrwxrwx    2  oracle oinstall    80   2006 - 05 - 13   07 : 13  backup
drwxrwxrwx    5  oracle oinstall   448   2006 - 01 - 03   10 : 45  developer6i
drwxr-xr-x    6  oracle oinstall   176   2006 - 05 - 24   06 : 56  gda
//drwxr-xr-x   8 oracle oinstall  504 2006-05-18 11:45 Install
drwxr-xr-x    8  oracle oinstall   200   2004 - 01 - 01   19 : 38  oracle
drwxr-xr-x    5  oracle oinstall   712   2006 - 05 - 18   09 : 38  Scripts
drwx------    6  root   root       152   2006 - 03 - 29   14 : 57  sources
drwxrwxrwx    2  oracle oinstall   128   2006 - 05 - 26   07 : 22  Upload
drwxrwxrwx   34  oracle oin/stall  1248   2005 - 12 - 07   11 : 28  vabank

v rezulitate poluciaiu:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
-rwxr-xr-x    1  oracle oinstall  9271   2006 - 05 - 26   08 : 00  a.out
drwxrwxrwx    2  oracle oinstall    80   2006 - 05 - 13   07 : 13  backup
drwxrwxrwx    5  oracle oinstall   448   2006 - 01 - 03   10 : 45  developer6i
drwxr-xr-x    6  oracle oinstall   176   2006 - 05 - 24   06 : 56  gdadrwxr-xr-x    8  oracle oinstall   200   2004 - 01 - 01   19 : 38  oracle
drwxr-xr-x    5  oracle oinstall   712   2006 - 05 - 18   09 : 38  Scripts
drwx------    6  root   root       152   2006 - 03 - 29   14 : 57  sources
drwxrwxrwx    2  oracle oinstall   128   2006 - 05 - 26   07 : 22  Upload
drwxrwxrwx   34  oracle oinstall  1248   2005 - 12 - 07   11 : 28  vabank

mne ne nravitsea poslednia strocika is rezulitata

Код: plaintext
drwxrwxrwx   34  oracle oinstall  1248   2005 - 12 - 07   11 : 28  vabank

pocemu on udalil "/" is oin/stall , gde oshibka ...
...
Рейтинг: 0 / 0
26.05.2006, 17:31
    #33755124
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
	c0=fgetc(in);
	skip= 0 ;
    while ((c1=fgetc(in)) != EOF) {
		//Set skipping
		if ((c0=='/') && (c1=='/')) skip =  1 ; 	

		//Write simbols
		if (skip ==  0 ) {
			fputc(c0,out);
			if (c1=='\n') fputc(c1, out);
		}

		//Prepare to next
		if (c1 == '\n') {
			skip= 0 ;
			c0=fgetc(in);
		} else
			c0=c1;
    }
...
Рейтинг: 0 / 0
26.05.2006, 17:32
    #33755135
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
gdapocemu on udalil "/" is oin/stall , gde oshibka ...
Вот тут:
Код: plaintext
1.
if ((c=='/') && ((c=fgetc(in))=='/')) skip =  1 ;
...
Рейтинг: 0 / 0
26.05.2006, 17:34
    #33755145
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
programa na C
Akh
Рано! Дал бы ещё человеку время подумать... ))
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / programa na C / 25 сообщений из 40, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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