2016-01-26 2 views
1

Целью этого упражнения является создание программы, которая может читать содержимое файла и копировать его на новый. Но есть еще одна вещь, которую я не знаю, как это сделать: Я также должен заменить все вкладки ('\ t'), которые я нахожу в файлах с 7 пробелами. Как я могу решить эту последнюю проблему? Спасибо.Найти и заменить вкладку в массиве пробелами?

Я пробовал это с этими строками кода, но, очевидно, не работал. Кроме того, также показывает следующее предупреждение:

предупреждение C4047: '=': 'символ' отличается уровней косвенности от 'гольца [8]

for (int i = 0; i < x; i++){ 
    if (buf[i] == '\t') { 
     buf[i] = "  "; 
    } 
} 

Это мой код: (если, конечно, она может быть улучшена в некотором роде, не стесняйтесь сказать мне. Спасибо)

#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 
    char buf[500]; 
    FILE *fp, *nuovo; 
    errno_t err, err1; 

    /*lettura e creazione file*/ 
    if (err = fopen_s(&fp, "text.txt", "r")) { 
     printf("Errore"); 
    } else { 
     printf("File Letto"); 
    } 
    if (err1 = fopen_s(&nuovo, "nuovo.txt", "w")) { 
     printf("Errore"); 
    } else { 
     printf("File Creato"); 
    } 

    int x = fread_s(buf, sizeof(buf), 1, 500, fp); 
    /*THIS IS THE PLACE FOR THE MISSING CODE*/ 


    fwrite(&buf, 1, x, nuovo); 
    fclose(fp); 
    fclose(nuovo); 
} 
+2

'ЬиЙ [я] =" ";' (не показывает 7 пробелов в встроенном коде ...) вы пытаетесь добавить 7 символов в 1 char – Flikk

+0

Я знаю, что это неправильно, но я не знаю, как это сделать – Amarildo

+0

одной из возможностей было бы читать или писать одиночные символы, проверьте, является ли символ вкладкой и замените его на 7 пробелов, если это так. – Flikk

ответ

2

Вы не можете заменить один символ со строкой, которая имеет много символов.

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

Пронумеруйте символы в buf и проверьте, является ли buf[i]TAB. Если это не TAB, звоните fputc(buf[i], nuovo). В противном случае позвоните по телефону fputs(" ", nuovo).

+0

Большое вам спасибо :) – Amarildo

1

Вы должны создать новую динамический выделить буфер порога скопировать все символы из источника и вкладки заменителя пробелов:

#include <malloc.h> 


const char *whitespace = "  "; 
int whitespaceLen = strlen(whitespace); 
int newBufSize = 0; 
char *newBuf = NULL; 
int newBufPos = 0; 

for (int i = 0; i < x; i++) 
{ 
    int isTab = buf[i] == '\t';    // test if next char in buf is tab 
    int charSize = isTab ? whitespaceLen : 1; // size which is neede for next char in newBuf 

    if (newBufPos + charSize < newBufSize) // test if newBuf is large enough 
    { 
     newBufSize += 500; 
     char *temp = realloc(newBuf, newBufSize); // enlarge newBuf 
     if (temp == NULL) 
     { 
      free(newBuf); // out of memory, free newBuf an terminate 
      newBuf = NULL; 
      break; 
     } 
     newBuf = temp; 
    } 

    if (isTab) 
    { 
     memcpy(newBuf+newBufPos, whitespace, whitespaceLen); // copy whitespace blanks to newBuf 
     newBufPos += whitespaceLen ; 
    } 
    else 
     newBuf[ newBufPos++ ] = buf[i]; // copy char to newBuf 
} 

Примечания где вы должны free(newBuf);

Смежные вопросы