Napisz program, który co drugą literę w pliku zamieni na znak ‘@'

0

Mam pytanie - jak będzie wyglądać pętla, która będzie zamieniać co drugą literę na znak @? Chodzi o tablice ASCII.

#include <stdio.h>

int main()
{
    FILE *sc;
    char  zn;
    sc= fopen("text1.txt","w");
    printf("Wprowadz tekst: \n");
    while((zn=getchar()) != '\n')
    putc(zn,sc);
    fclose(sc);
    
    return 0;

}
2

Wczytaj plik:

#include <iostream>
#include <string>
#include <fstream>

std::fstream plik;
plik.open("jaiksplik.txt", std::ios::in);
std::string trescpliku;
std::string bufor;
while (std::getline(plik, bufor)
{
    trescpliku += bufor;
}
plik.close();

Następnie zamień co drugi znak:

for (int i = 0; i < trescpliku.length(); i++)
{
    if (i % 2 == 0)
    {
        trescpliku[i] = '@';
    }
}

I zapisz wyniki:

plik.open("jakisplik", std::ios::out);
plik << trescpliku;
plik.close();

Powinno zadziałać (nie testowałem)

0

@Kamil B: A mogłbys to napisac w jezyku c :) ?

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

int main()
{
    char ch;
    FILE* plik; 
    plik = fopen("jakisplik", "r");
    char tresc[10000];
    int i = 0;
    while ((ch = getc(plik)) != EOF)
    {
        tresc[i] = ch;
        i++;
    }
    fclose(plik);
    for (int i2 = 0; i2 < i /* jak bedzie ucinac ostatni znak to daj <= */; i++)
    {
        if (i2 % 2 == 0)
       {
           tresc[i2] = '@';
       }
    }
    plik = fopen("jakisplik", "w");
    for (int i2 = 0; i2 < i /* jak bedzie ucinac ostatni znak to daj <= */; i++)
    {
        putc(tresc[i2], plik);
    }
    fclose(plik);
    return 0;
}
2

co drugą literę, czy co drugi znak? Jest różnica!
https://godbolt.org/z/dnxzqj

#include <stdio.h>
#include <ctype.h>

void replaceAlphasWithAtsInString(char *s, int *state)
{
    while (*s) {
        // brakuje dosłownie 3 linijek
        ++s;
    }
}

void replaceEvenAlphasWithAtsInStream(FILE *in, FILE *out)
{
    char line[1024];
    int state = 0;

    while (fgets(line, sizeof(line), in)) {
        replaceAlphasWithAtsInString(line, &state);
        fputs(line, out);
    }
}

int main()
{
    replaceEvenAlphasWithAtsInStream(stdin, stdout);
    return 0;
}
0

@Kamil B:

  • ch powinno być typu int (zobacz co zwraca getc)
  • pliku nie trzeba w ogóle czytać - można po prostu nadpisać co drugi bajt ( otworzyć w trybie "rw" i użyć fseek )

1 użytkowników online, w tym zalogowanych: 0, gości: 1