Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 1
Регистрация: 03.11.2012
Сообщений: 77
Записей в блоге: 1
1

Отредактировать текст, удаляя лишние пробелы между словами

18.03.2013, 19:43. Просмотров 1696. Ответов 8
Метки нет (Все метки)

В текстовом файле хранится некоторый текст. Отредактировать текст, удаляя лишние пробелы между словами.
почему то мое предложение из файла удаляется,и он становится пустым


C
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
40
41
42
43
44
45
46
#include<stdio.h>
#include<string.h>
FILE *f;
 
 
 
 
int main(void)
{
    char str[250]="";
    char res[250] = "";
    int i=0,j=0;
    
    f=fopen("file1.txt","wt");
    
    if(f==NULL)
    {
       puts("error file");
       return 1;
    }
 
    
   while ((str[i]=fgetc(f))!=EOF)
    
 
    {
        if (str[i]==' ') 
        {
          if(j==0) continue;
          if (str[i+1]==' ') continue;
        }
        res[j] = str[i];
        j++;
        i++;
    }
    
    i=strlen(res);
    if(res[i-2] == ' ')
        res[i-2] = '\0';
    
       fprintf(f,"%s",res);
  
   
   fclose(f);
   return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.03.2013, 19:43
Ответы с готовыми решениями:

Отредактировать строку удаляя лишние пробелы между словами
Отредактировать строку удаляя лишние пробелы между словами.На языке си.

Удалить из файла лишние пробелы, оставив по одному между словами
Добрый день. Помогите с программой. Заранее спасибо. Дан файл, содержащий некоторый текст....

Удалить из текстового файла все лишние пробелы, оставив между словами не более одного пробела
Дано вот такое задание: Дан текстовый файл. Удалить из него все лишние пробелы, оставив между...

Отредактировать текст, удаляя те слова, которые имеют больше 3-х гласных букв
Помогите разобраться,вроде программа простенькая,но работает криво.Если слово заканчивается где...

8
5 / 5 / 6
Регистрация: 20.05.2012
Сообщений: 32
18.03.2013, 20:25 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Во первых параметр не верен(в вашем коде, в файле при открытии все стирается):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
РЕЖИМ                   ОПИСАНИЕ
                                                            
            "r"          открыть файл для чтения.(Этот файл должен
                         существовать).
                                                            
            "w"          открыть пустой файл для записи; если этот
                         файл  ранее  существовал,  его содержимое
         
                         уничтожается.
                         
            "a"          открыть файл для  записи  (добавления)  в
                         конец. Если данного файла нет, то вначале
                         он создается.
                         
            "r+"         открыть файл одновременно  для  чтения  и
                         записи. Файл должен существовать.
                         
            "w+"         открыть  пустой файл для чтения и записи.
                         Если этот  файл  ранее  существовал,  его
                         сожержимое уничтожается.
                         
            "a+"         открыть  файл  для  чтения и  добавления.
                         Если файла нет, вначале он создается.
ну и код чуть подправил

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 while ((str[i]=fgetc(f))!=EOF)
    {
        if (str[i]==' ') 
        {
            continue;
        }
        res[i] = str[i];
        i++;
    }
    
   fprintf(f,"\n");
 
    i=strlen(res);
    res[i] = '\0';
    fprintf(f,"%s",res);
да и лучше вместо str[] ввести обычную переменную, массив там не нужен
1
0 / 0 / 1
Регистрация: 03.11.2012
Сообщений: 77
Записей в блоге: 1
18.03.2013, 20:41  [ТС] 3
А какой режим выбрать чтобы вместо твоего записанного предложения, было записано исправленное предложение?




и так как ты подправил код удаляет абсолютно все пробелы,не оставляя даже одного
0
5 / 5 / 6
Регистрация: 20.05.2012
Сообщений: 32
18.03.2013, 21:00 4
a+ думаю лучшее, т.к. и читает и записывает сразу в конец.
ааа моя вина, я думал все пробелы удалить %)

Добавлено через 19 минут
Цитата Сообщение от tyrbotroll Посмотреть сообщение
и так как ты подправил код удаляет абсолютно все пробелы,не оставляя даже одного
C
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
40
41
42
43
44
45
#include "stdio.h"
#include "string.h"
 
int main(void)
{
    char str[250]="";
    int i=0,j,k, count;
    FILE* f;
    
    f=fopen("file1.txt","a+");
    
    if(f==NULL)
    {
       puts("error file");
       return 1;
    }
 
    fgets(str,249,f);
 
    i=strlen(str);
    
    fprintf(f,"\n");
 
    for(j = 0; j < i; j++)
    {
        if(str[j] == ' ')
        {
            count = 0;
 
            for(k = j + 1; str[k] == ' '; k++)
            {
                count++;
            }
            fprintf(f,"%c",str[j]);
            j += count;
        }
        else
        {
            fprintf(f,"%c",str[j]);
        }
    }
 
   fclose(f);
   return 0;
}
если пригодится
0
3078 / 2399 / 255
Регистрация: 11.03.2009
Сообщений: 5,444
18.03.2013, 21:38 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C
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
40
#include <stdio.h>
 
int main(int argc, char* argv[])
{
   int sym, flag = 0;
   char *fInName = "in.txt";
   char *fOutName = "out.txt";
   FILE *fIn, *fOut;
 
   fIn = fopen(fInName, "r");
   if (!fIn)
      return 1;
   fOut = fopen(fOutName, "w");
   if (!fOut)
      return 2;
 
   while((sym = fgetc(fIn)) != EOF)
   {
      if (sym == ' ')
      {
         if (flag == 0)
         {
            fputc(sym, fOut);
            flag = 1;
         }
         else
            continue;
      }
      else
      {
         fputc(sym, fOut);
         flag = 0;
      }
   }
   fclose(fIn);
   fclose(fOut);
   remove(fInName);
   rename(fOutName, fInName);
   return 0;
}
1
0 / 0 / 1
Регистрация: 03.11.2012
Сообщений: 77
Записей в блоге: 1
18.03.2013, 23:36  [ТС] 6
Цитата Сообщение от kazak Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
 
 
 
   char *fInName = "in.txt";
   char *fOutName = "out.txt";
   FILE *fIn, *fOut;
   fIn = fopen(fInName, "r");
   fOut = fopen(fOutName, "w");
   
 
 
   
   remove(fInName);
   rename(fOutName, fInName);
 
}
подскажи пожалуйста почему ты изменил начальную функцию фопен?почему нельзя писать имя файла в функции,а нужно создавать указатели на файл типа char?и что за 2 последних функции ты использовал?
0
3078 / 2399 / 255
Регистрация: 11.03.2009
Сообщений: 5,444
18.03.2013, 23:47 7
Цитата Сообщение от tyrbotroll Посмотреть сообщение
подскажи пожалуйста почему ты изменил начальную функцию фопен?
Так удобнее, имя файла фигурирует в нескольких местах программы, если приспичит другое имя дать, проще будет редактировать.
Цитата Сообщение от tyrbotroll Посмотреть сообщение
и что за 2 последних функции ты использовал?
Удаляем старый файл, переименовываем новый в старый, плюс еще забыл сделать удаление нового, надо добавить строку
C
1
remove(fOutName);
1
Эксперт C
25226 / 15701 / 3354
Регистрация: 24.12.2010
Сообщений: 34,244
19.03.2013, 00:45 8
Цитата Сообщение от kazak Посмотреть сообщение
плюс еще забыл сделать удаление нового
А вот этого вовсе не нужно, он же переименовался...
1
3078 / 2399 / 255
Регистрация: 11.03.2009
Сообщений: 5,444
19.03.2013, 09:20 9
А, ну да.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2013, 09:20

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Напечатать заданный текст, удалив из него лишние пробелы
Ребят,я начинающая программистка) помогите решить задачу на С Напечатать заданный текст, удалив из...

Функция, которая оставляет в строке только буквы и пробелы между словами
Есть примерный код, но выводит совсем не то. Кто знает, в чем причина, и что нужно переделать или...

Выровнять строки в файле по правой и левой границе, вставляя между словами пробелы
Доброго времени суток. Задача: Выравнять строки в файле по правой и левой границе, вставляя между...

Отредактировать предложение, удаляя из него лишние пробелы, оставляя по одному пробелу между словами
Отредактировать предложение, удаляя из него лишние пробелы, оставляя по одному пробелу между...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.