2013-04-01 7 views
0

Я пытаюсь выбрать определенные символы из файла, использовать их в качестве заглавных букв и отображать выходные данные. У меня возникли проблемы с выбором символов:Заглавные буквы, считанные из файла

int i; 
char c; 
char currentChar; 
char previousChar = ' '; 

inp = fopen("junk.txt", "r"); 
if(inp == NULL){ 
    printf("Error opening file, quitting... \n"); 
    return 1; 
} 

c = fgetc(inp); 
while(c != EOF){ 
    if(isalpha(c)){ 
     putchar(toupper(c)); 
    c = fgetc(inp); 

Да, это домашнее задание. Я не ищу ответа, я просто пытаюсь понять, что я делаю неправильно. Это не требует использования строк или массивов. Программа должна читать содержимое файла, заглавные буквы первой буквы каждого слова и печатать результаты.

+6

Можете ли вы уточнить? Какая у вас проблема? –

+0

Пожалуйста, предоставьте немного больше кода. В частности, это хорошая идея, чтобы показать все скобки, необходимые для балансирования того, что находится в вашем фрагменте кода. – dasblinkenlight

+0

где «подборка символов»? Поскольку вы хотите, чтобы ... там, где вы не выбираете, вы просто конвертируете каждый символ в верхний регистр. –

ответ

1

Из toupper() страницы cplusplus.com:

Int ToUpper (Int с);

Преобразование строчной буквы в верхний регистр Преобразует c в верхний регистр эквивалентно, если c является строчной буквой и имеет эквивалент в верхнем регистре. Если такое преобразование невозможно, возвращаемое значение не изменяется.

Так нет необходимости проверки if(isalpha(c)) для полукокса, что yoou хочет к верхнему регистру

и ваш код не могут выглядеть следующим образом

char previousChar = ' '; 
while((c = fgetc(inp)) != EOF){ 
    if(!isalpha(previousChar)) 
     putchar(toupper(c)); 
    else 
     putchar(c); 
    previousChar = c; 
} 

Согласно алку замечания: Если документ содержит слова, такие как peer2peer, тогда он отобразит Peer2Peer с предыдущим кодом. И если вы хотите, чтобы отображаться Peer2peer вы должны изменить свою проверку таким образом:

char previousChar = ' '; 
while((c = fgetc(inp)) != EOF){ 
    if(previousChar==' ' || previousChar=='\n' || previousChar=='\r' || 
     previousChar=='\t' || previousChar=='\v') 
     putchar(toupper(c)); 
    else 
     putchar(c); 
    previousChar = c; 
} 
+0

'Программа должна читать содержимое файла, заглавные буквы первой буквы каждого слова и печатать результаты.' – KevinDTimm

+0

@KevinDTimm ответ обновлен – MOHAMED

+0

Это изменит «peer2peer», чтобы стать «Peer2Peer». – alk

0

Что касается различных возможностей обычных разделителей слов я бы предложить этот подход:

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

int main(void) 
{ 
    int result = EXIT_SUCCESS; /* be optimistic! :-) */ 

    int charCurrent = '\0' 
    int charPrevious = ' '; 

    while (EOF != (charCurrent = fgetc(stdin)) || (EOF == charPrevious)) 
    { 
    if (isspace(charPrevious)) 
    { 
     charCurrent = toupper(charCurrent); 
    } 

    charPrevious = fputc(charCurrent, stdout); 
    } 

    if ((EOF == charCurrent) && !feof(stdin)) 
    { 
    result = EXIT_FAILURE; 
    fprintf(stderr, "error getting\n"); 
    } 

    if (EOF == charPrevious) 
    { 
    result = EXIT_FAILURE; 
    fprintf(stderr, "error putting\n"); 
    } 

    return result; 
} 

Вы затем вызвать программа:

$ ./capitaliser <infile.txt >outfile.txt 
Смежные вопросы