Проблем със C задача

S_Xu6THuK

Registered
Здравейте!
Мисля, че това е правилния раздел, понеже беше споменато c++.
Без много излишни приказки, минавам на въпроса :D
Става въпрос за една курсова задачка, в която ме затруднява едно подусловие. Имам една идея как трябва да работи, но уви не става и не става
Код:
void func2(void) {
     if((fp=fopen("txt.txt","r"))== NULL) { printf("cannot open a file"); exit(1); }
     char c,e, simvoli[2][100];
     int a=0,i=0;
      /*for(;;){
      if((c=fgetc(fp))==EOF)break;
      if(c == '.' || c == ' '){
           if(e != '.' || e != ' ') {
                a++; e=c; i++; while((c=fgetc(fp))!=' ') { strcat(simvoli[i][1],c) ; }
                } } }
      
      for(;;) { if((c=fgetc(fp))==EOF)break;
                if(c == '.' || c == ' '){ a++; i++; while((c=fgetc(fp))!=' ') { strcat(simvoli[i][1],c); } } }
     
       printf("\nBroq na dumite e : %d ",a);
       printf("\nDuma : %s ",simvoli[2][1]);
       printf("\n\n");
}
Условието е, от текстов файл да изведа всички думи, като намеря коя е най-дългата. Другото подусловие е да изведа и всички четирибуквени, но предполагам, ако видя как става извеждането ще мога и сам да се справя.

Благодаря предварително! :)
Поздрави и Честит Иванов Ден на празнуващите!
 
Какво точно те затруднява? Кажи какво прави в момента кода и кое не можеш да му допишеш. :)
 
Така пусната, програмата забива.
Искам да направя следното, правя си брояч за интервалите или точките в четения поток, чрез c=fgetc(fp). Когато достигне до нов интервал или точка да увеличава стойността на а (броя на думите), да увеличава дадена променлива i, която е адрес на двумерен масив, който пък съдържа номера на думата и самата дума, и да нулира четената дума str (в момента не присъства в кода, защото опитвах различни начини, но и с нея не работи), а когато не е достигнала нов интервал или точка просто в str да добавя сега прочетения символ.

Може би не разбрахте, но ако имам файл със съдържание:
"едно две три"
искам да става следното нещо
при първия момент на цикъла
c = "e"; от fgetc
str = c;
втори момент
c = "д";
str = str + c; тук е главния ми проблем опитвах със strcat и както съм го написъл сега, но все не ставаше. В PHP бих го написъл str .= c; но тук нямало такъв оператор.
и след като str се напълни със съдържанието "едно" и програмата стигне до празно място да се изпълни следното нещо
а++
str отива в масив simvoli[1]
str приема празна стойност

Това ми беше първоначалната идея, опитвах различни други, но без успех. Ако имате идея различна от това, може да я споделите. Пак повтарям условието е да изведа броя на символите на най-дългата дума.
 
Не съм осмислил цялото нещо, което написа, защото съм прекалено уморен в момента, за да мисля :D Утре може да прегледам пак темата.

Та ако проблема ти е с добавяне на символ към стринг можеш да го направиш така:
int len = strlen(str);
str[len] = c;
str[len+1] = 0;

това можеш да си го вкараш и във функция:
void strcatc (char* str, char c)
{
int len = strlen(str);
str[len] = c;
str[len+1] = 0;
}
 
Колеги, разреших проблема с друг метод.
Ако някой изпадне в подобна ситуация - изкарах информацията от файла ред по ред и използвах функцията strtok.
Благодаря на StormBreaker за отделеното време. Не знам дали ще е в разрез с правилата да дам съпорт точката на него, но ако няма проблеми ще я дам :)

Поздрави и успех в програмирането :)
 

Back
Горе