English 中文(简体)
Replace placeholders with text - C?
原标题:
  • 时间:2009-11-14 02:44:47
  •  标签:
  • c
  • replace

I use the below function to retrieve characters one by one from a FILE stream. Now the text in that file will sometimes include places holders like !first_name! within the text. What s the best way to detect when such a place holder start and when it ends so that I can swap each character between !! with proper character from another storage?

void print_chars(FILE *file) {
        fseek(file, 0L, 0);
        int cr;

        do {
              cr = fgetc(file);
              putchar(cr);
        } while (cr != EOF);
}
最佳回答

you could also take a more primitive approach also by reading it in 1 character at a time and then breaking out if char== ! and then build a string up til the other ! and then just compare that string with your list of replacements..

@goe s reply To say push a char.. here is some code


//c is char read from file
if(c== ! ){
  char str[100];
  c=fgetc
  int i=0;
  while(c!= ! ){
    str[i]=c;
    i++;
    c=fgetc
  }
  i++;
  str[i]=  ; //null terminate
  if(strcmp(str,"....")... //continue... 
}
问题回答

Start by using fgets() to read lines at a time, and then (assuming placeholders won t have spaces or newlines in them), use strchr() to locate the first exclamation mark, another to find the second, and strcpsn() or strspn() to ensure that only permitted characters appear between them. Then write what goes before the first exclamation mark and the replacement text, and then resume scanning for more placeholders on the same line.

Construct a finite automaton aka state machine?

If you want something reliable that handles corner cases, consider using a real lexical analysis tool like Lex or re2c.





相关问题
Fastest method for running a binary search on a file in C?

For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

Encoding, decoding an integer to a char array

Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...

热门标签