Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2013, 22:10   #1
Li_Me
Новичок
Джуниор
 
Регистрация: 06.05.2013
Сообщений: 1
По умолчанию Язык Си. открыть файл, считать строки, разбить их на слова, отсортировать по алфавиту

Ввести текст из файла, а также массив символов-разделителей с клавиатуры. Собрать новый текст, сформированный по следующему признаку: в каждой строке нового текста расположены все слова исходного текста, начинающиеся на одну букву, а строки отсортированы в алфавитном порядке по буквам, с которых начинаются слова. Вывести полученный текст на экран.

Символы-разделители используются при разбиении строк на слова. Символы могут быть разными, в том числе и буквы. Почему-то за символ автоматически считается буква "g". То есть не зависимо от того, какие символы я ввожу, слова с буквой g разделяются. И не могу найти причину этого. Делаю в C++ Builder, а в Dev C++ такой ошибки нет
И как сделать, чтобы было необходимо выполнение каждого шага программы. И если,например, пользователь сначала выберет 3 пункт, то появлялось сообщение об ошибке.
И еще, как вынести разбиение строк на слова отдельной функцией?

Код:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<locale.h>
#include<ctype.h>

void simvol(char sr[])
{int i;
printf("vvedite 5 simvolov\n");
for(i=0;i<=5;i++)
    scanf("%c",&sr[i]);
}

void sort(char *a[],int n)
{int i,j;
char *S1;
for(i=0;i<n;i++)
        {
        for(j=i+1;j<n;j++)
                {
                if(strcmp(a[i],a[j])>0)
                        {
                        S1=a[i];
                        a[i]=a[j];
                        a[j]=S1;
                        }
                }
        }
}

int main(int argc, char* argv[])
{
char *str2;
char *S1;
char *a[90];
int n,j,i,k,sel;
char sr[5];
char lines[100][1000];
int nl = 0,nlmax=0;
char *p;
FILE *file;
menu: printf("\n\n\n 1-vvod simvolov\n 2-obrabotka teksta\n 3-output new text\n 4-end programm\n Choose action:");
scanf("%d",&sel);
switch(sel)
      {
      case 1:
                {
                simvol(sr);
                goto menu;
                }
       case 2:
                {
                file = fopen("D:\\HP3.txt", "rt");
                while (!feof(file))
                        {
                        if (fgetc(file) == '\n')
                        nlmax++;
                        }
                nlmax++;
                fclose(file);
                file = fopen("D:\\HP3.txt", "rt");
                while (nl < nlmax && fgets(lines[nl], sizeof(lines[nl]), file))
                        {
                        p = strrchr(lines[nl], '\n');
                        if(p)*p='\0';
                        nl++;
                        }
               for (k = 0; k < nlmax; k++)
                   printf("%s\n", lines[k]);
               /*выделение памяти под массив слов*/
               for (k=0; k<=60; k++)
            	   {
	            a[k]=(char*)malloc(20*sizeof(char));
             	    }
	       /*разбиение строки на слова*/
               n=0;
               for (j=0; j<=nlmax; j++)
             	   { strlwr(lines[j]);
	            str2 = strtok(lines[j], sr );
	            while (str2 != NULL)
	                 {a[n]=str2;
		          str2 = strtok (NULL, sr);
		          n++;
	            	 }
             	   }
               sort(a,n);
               }
               goto menu;
       case 3:{for(k=0;k<n;k++)
                  if(strncmp(a[k],a[k+1],1)==0)
                    printf("%s ",a[k]);
                  else printf("%s\n",a[k]);;
              }
            goto menu;
       case 4:printf("end of programm\n");
              break;
       default: printf("vveden nekorrektnii simvol\n");}
  system("PAUSE");
        return 0;
}

Последний раз редактировалось Li_Me; 08.05.2013 в 00:28.
Li_Me вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строки. Проверка принадлежности слова латинскому алфавиту NinoZombie Общие вопросы C/C++ 3 16.05.2011 04:48
как разбить строки на слова? Lapo4ka Общие вопросы C/C++ 7 01.05.2011 17:09
отсортировать слова в строке по алфавиту H1ghlander Общие вопросы C/C++ 4 05.11.2010 12:31
разбить текстовый файл на слова pavel_1406 Общие вопросы C/C++ 3 19.12.2009 22:11
Отсортировать слова в заданном списке по алфавиту. Nynka Помощь студентам 5 08.12.2009 00:45