Тема: Обробка текстового файлу
Допоможіть будь ласка створити програму, отже, дано текстовий файл. Змінити в ньому всі пробіли, що йдуть підрят на один пробіл.
дякую наперед!
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Обробка текстового файлу
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Допоможіть будь ласка створити програму, отже, дано текстовий файл. Змінити в ньому всі пробіли, що йдуть підрят на один пробіл.
дякую наперед!
Пане, ви, коли реєструвалися, мали змогу прочитати правила, а потім ще й галочку поставили, що з ними погоджуєтеся. А в правилах рівно одна картинка є. От що вам заважало ту картинку переглянути?
Вибачте, не доглядів, на наступний раз буду уважніший
Ось приблизний код, я, на жаль, прямо зараз не маю доступу до IDE, тому не зміг зневадити, але ви самі спробуйте, тут не має бути важко:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STRING_NUMBER 100
#define MAX_STRING_LENGTH 128
#define MAX_COLUMNS 5
#define OUTPUT_AREA 60
/* string_buffer: space for carrying lines
*/
char string_buffer[MAX_STRING_NUMBER][MAX_STRING_LENGTH];
/* ws_replace: reads lines from file, adds \0 to each line,
* replaces white spaces in sequence by 1 space character,
* saves lines where ptr_to_string points,
* returns number of read lines or -1 if there was an error
*/
int ws_replace(char **ptr_to_string, int size_of_string);
int main(int argc, char** argv) {
int nlines = 0; // number of lines
char *string_ptr[MAX_STRING_NUMBER];
string_ptr[0] = string_buffer[0];
if((nlines = ws_replace(string_ptr, MAX_STRING_LENGTH)) != -1){
printf("There was %d string(s) operated successfully\n", nlines);
} else {
return (EXIT_FAILURE);
}
return (EXIT_SUCCESS);
}
int ws_replace(char **pointer_to_string, int size_of_string){
FILE *fp; // file pointer
char c;
char templine[MAX_STRING_LENGTH];
int i, j, k; // variables for loop
int nlines; // number of read lines
/* opening file for reading */
fp = fopen("user_strings.txt", "r");
if(fp == NULL) {
perror("Error opening file");
return (-1);
}
/* writing lines into the user-defined space */
for( nlines = 0;
fgets(*(pointer_to_string+nlines), size_of_string, fp) != NULL;
nlines++ ){
printf("Operating line: %s", *(pointer_to_string+nlines));
}
/* closing file */
fclose(fp);
/* Adding \0 to the end of lines
*/
for(i = 0, j = 0; i < nlines; i++){
/* moving j to the end of current line */
while(( ( c = *(*(pointer_to_string+i)+j) ) != '\n' || c != '\0' ) &&
j < MAX_STRING_LENGTH ){
j++;
}
if(j != MAX_STRING_LENGTH){
*(*(pointer_to_string+i)+j+1) = '\0';
} else {
*(*(pointer_to_string+i)+j) = '\0';
}
j = 0;
}
/* Replaceing ws in sequence by single space */
for(i = 0, j = 0, k=0; i < nlines; i++){
while( *(*(pointer_to_string+i)+j) != '\n' ||
*(*(pointer_to_string+i)+j) != '\0' ){
if(*(*(pointer_to_string+i)+j) != ' '){
templine[j] = *(*(pointer_to_string+i)+j);
} else if (*(*(pointer_to_string+i)+j) == ' ' &&
*(*(pointer_to_string+i)+j+1) != ' '){
templine[j] = *(*(pointer_to_string+i)+j);
}
j++;
}
j = 0;
while(templine[j] != '\n' || templine[j] != '\0'){
*(*(pointer_to_string+i)+j) = templine[j];
}
j = 0;
}
return nlines;
}
Пан - великий майстер збочень...
FILE *infile, *outfile;
...
int in, wasSpace = 0;
while( ( in = fgetc( infile ) ) != EOF )
{
if( ( in != ' ' ) || !wasSpace )
fputc( in, outfile );
wasSpace = ( in == ' ' );
}
...
rename(...);
koala, мій код насправді виглядає монстроподібним в порівнянні із вашим, я мав сирець і його переробив під цю задачу, але ваш підхід безумовно кращий
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися