Advertisement
Guest User

Untitled

a guest
Dec 17th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.91 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6.  
  7. void append(char* s, char c) //Funktion um einen Character an einen String anzuhängen
  8. {
  9. int len = strlen(s);
  10. s[len] = c;
  11. s[len+1] = '\0';
  12. }
  13.  
  14.  
  15. int nextviablepos(int outstrlen){ //Funktion returned Länge des Strings nachdem Leerzeichen hinzugefügt wurden bis sie durch 8 teilbar ist
  16.  
  17.  
  18. if (outstrlen % 8 == 0) //Fall ist durch 8 teilbar, ein Tab hinzufügen
  19. {
  20. return outstrlen+8;
  21. }
  22.  
  23. while (outstrlen %8 != 0) //outstrlen wird um 1 erhöht bis durch 8 teilbar
  24. {
  25. outstrlen++;
  26. }
  27.  
  28. return outstrlen;
  29.  
  30. }
  31.  
  32. int main(){
  33.  
  34. int waitingforT=0;
  35. int i, j, n;
  36. char *instr=0;
  37. char outstr[256]="";
  38. char filename[256]="";
  39. long length;
  40.  
  41. printf("Geben Sie einen Dateinamen oder direkt den Inputtext ein: ");
  42. scanf("%s", filename); //Eingabe Filename
  43.  
  44. FILE *fp = fopen (filename, "r"); //Öffnung Datei
  45.  
  46. if (fp) //wenn eine Datei mit eingegebenem Namen existiert
  47. {
  48. fseek (fp, 0, SEEK_END); //Sprung ans ende der datei
  49. length = ftell (fp); //weise Variable length Größe der Datei zu
  50. fseek (fp, 0, SEEK_SET); //Springe an den Anfang der Datei
  51. instr = malloc (length + 1); //allocate Memory mit Größe Datei +1 für \0, weil String
  52.  
  53. if (instr)
  54. {
  55. fread (instr, 1, length, fp); //lies die Datei fp in instr in 1 Byte Stücken ein
  56. }
  57. fclose (fp); //schließe Datei, \0 für String
  58. instr[length] = '\0';
  59. }
  60. else
  61. {
  62. instr = filename; //falls der Filename ungültig ist, wird das Input verwendet
  63. }
  64.  
  65.  
  66. for (i=0; i<=strlen(instr); i++) //for Schleife für jeden Character im Input
  67. {
  68.  
  69. if (waitingforT && instr[i]== 't') //wenn ein \ vorausging und der Character ein t ist
  70.  
  71. {
  72.  
  73. n=nextviablepos(strlen(outstr)); //n=gewünschte Länge des Strings nach Tab
  74. for (j=strlen(outstr); j<n; j++){ //for Schleife von aktueller Länge bis gewünschter Länge
  75.  
  76. append(outstr, ' '); //Leerzeichen am ende des Strings einfügen
  77. }
  78. waitingforT = 0; //Reset waitingforT
  79.  
  80. }
  81.  
  82. else
  83.  
  84. if (waitingforT) { //wenn ein \ vorkam, aber kein t folgte
  85.  
  86. waitingforT = 0; //Reset waitingforT
  87. append(outstr, '\\'); // \ einfügen ans ende des Strings falls nach dem \ kein t folgte
  88. if (instr[i] == '\\') //Fall Doppelbackslash \\ waitingforT auf 1 setzen
  89. {
  90. waitingforT = 1;
  91. }
  92. else {
  93.  
  94. append(outstr, instr[i]); //Fall Character außer \ und t nach \ (Character an String anfügen)
  95. }
  96. }
  97. else
  98. if (instr[i] == '\\') { //wenn ein \ vorkommt setze waitingforT auf 1
  99.  
  100. waitingforT = 1;
  101. }
  102. else { //Normalfall, kein special Character
  103. append(outstr, instr[i]);
  104. }
  105.  
  106. }
  107. printf("%s\n", outstr);
  108.  
  109. return (1);
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement