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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2011, 16:58   #1
AlexStudent
Новичок
Джуниор
 
Регистрация: 29.05.2011
Сообщений: 2
Восклицание Работа со строками и символами.

Здравствуйте, уважаемые программисты. Было поставлено следующее задание-Определить кол-во слов в тексте совпадающих с введённым с клавиатуры словом,по нажатию любой клавиши выделить цветом первое найденное из таких слов. Собственно код я написал, но с использованием массива т.е запихал строку в массив и далее работал, но моем уважаемому преподавателю не понравилось что я использовал массив (как не бредово звучит но это так) Подскажите, как можно написать данную программу без использования массивов, понимаю что это гемор, но ведь преподаватель всегда прав!( Собственно код:
Код:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <string.h>

void main()
{
 clrscr();
  FILE *f = fopen("input.txt","r");
   char s[255];
   char str[255];
   char ss[50][20];
   char *token;
   cout << "Sdoerjimoe file: " << endl << endl;
    int n = 0;
   char *p;
   while (!feof(f))
    {
     fgets(s,256,f);
     cout << s;
     p = strtok(s," .,\n");
     strcpy(ss[n],p);
    while (p)
    {
     n++;
     p = strtok(NULL," .,\n");
     strcpy(ss[n],p);
    }
    }
   cout << endl << "Vvedite slovo, kotoroe nado nayti: ";
   cin >> str;
   int count = 0;
   for (int i = 0; i < n; i++)
    if (strcmp(ss[i],str) == 0)
     count++;
   cout << "Kolichestvo vhojdeniy: " << count << endl;
   getch();
   int k;
   for (i = 0; i < n; i++)
    {
     if (strcmp(ss[i],str) == 0)
      {
       textcolor(3);
       cprintf("%s ",ss[i]);
       k = i;
       break;
      }
     else cout << ss[i] << " ";
    }
    for (i = k+1; i < n; i++)
     cout << ss[i] << " ";

  fclose(f);
 getch();
}
AlexStudent вне форума Ответить с цитированием
Старый 29.05.2011, 18:28   #2
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

ну объявите указатель на строку(char*), это будет "не массив", и работайте с ним как с обычным массивом char[]
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 30.05.2011, 01:00   #3
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от AlexStudent Посмотреть сообщение
но моем уважаемому преподавателю не понравилось что я использовал массив
Если вы все правильно поняли, то можете передать своему преподавателю, что это не возможно. В C/C++ строкой может являться только массив символов. Больше ничего.

Но мне кажется, что вы что-то не так поняли
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 30.05.2011, 01:50   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

скорей всего препод имеет ввиду использовать std::string
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 30.05.2011, 01:53   #5
Mahin
Пользователь
 
Регистрация: 18.11.2009
Сообщений: 39
По умолчанию

возможно уважаемый преподаватель имел ввиду, что нужно использовать string вместо массива char`ов


опоздал
Mahin вне форума Ответить с цитированием
Старый 30.05.2011, 10:59   #6
AlexStudent
Новичок
Джуниор
 
Регистрация: 29.05.2011
Сообщений: 2
По умолчанию

не понял мысль...каким образом использовать string? Всегда такого рода задачки делал используя char, как это будет выглядеть если брать string?
AlexStudent вне форума Ответить с цитированием
Старый 30.05.2011, 16:17   #7
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

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


На написание решения ушло много времени, оно топорное, но рабочее. После написания в Visual Studio 2010, адаптировал для Borland C++ 3.0.

Решение

Код:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>

void main()
{          clrscr();


	FILE * p;
	long int F;
	long int Q;
	long int W;
	p = fopen ( "input.txt", "r" );
	
	if ( p==NULL )
	{
		cout<<"Can't open file"<<endl; return;
	}
	textcolor(9); 
	int itog=0, space_counter=0;
	char VS, ch, zad, glas[]={'E', 'e', 'Y', 'y','U', 'u','I', 'i','O', 'o','A', 'a'};
	
	while(!feof(p))
	{
		ch=fgetc(p);
		cout<<ch;
		if (ch==' ') space_counter++;
	}

	cout<<endl<<"probelov u nas "<<space_counter<<" , a slov, veroyatno "<<space_counter+1<<endl;

	fseek(p,0,SEEK_SET);
	int flag=1;
	while(!feof(p))


	{	ch=fgetc(p);
		while((ch==' ') && (ch!=EOF))
		{
			cout<<" obrabotan probel "<<endl;
			ch=fgetc(p);
		}

		for(int i=0; i<12; i++)
			{
				if(ch==glas[i])
				{
					if (flag!=1)
					{
					fseek(p,-2,SEEK_CUR);
					zad=fgetc(p);
					}

					if ((zad==' ')||(flag==1))
					{	cout<<endl<<"_"<<zad<<"_"<<endl;
						fseek(p,1,SEEK_CUR);
						VS=ch;
						//вставлю-ка тут запоминатель каретки
						Q=ftell(p);
						
						cout<<" first glasn found "<<endl;
						ch=fgetc(p);

						while((ch!=' ') && (ch!=EOF) )
						{
						cout<<" space ";
						ch=fgetc(p);
						}
						cout<<" proverka_1 "<<ch<<" 1"<<endl;
						fseek(p,-2,SEEK_CUR);
						ch=fgetc(p);
						cout<<" proverka_2 "<<ch<<" 2"<<endl;
						for(int j=0; j<12; j++)
						if (ch==glas[j])
						{
							cout<<" NAIDENO! "<<VS<<"  "<<ch<<endl;
							itog++;
							//И тут тоже
							W=ftell(p);
						}


					}fseek(p,1,SEEK_CUR); flag=50;
				}
			}
	}

	cout<<endl<<"Kolichestvo nujnyh slov ravno : "<<itog<<endl;
	
	
	
	while(flag==50)
	{
		char light;
		fseek(p,0,SEEK_END);
		for (int k=1; k<20; k++)
		{
			fseek(p,EOF-k,SEEK_END);
			light=fgetc(p);
				if (light==' ')
				{ 
				F=ftell(p); flag=1; break;break;
				} 
		} 
	}
			
	fseek(p,0,SEEK_SET);
	
while (ftell(p) !=Q-1)
	{	
		ch=fgetc(p);
		cout<<ch;
		
	}

	while(ftell(p) != W)
	{				
						char ulight=fgetc(p);
						if (ulight!='.')
						{
							textcolor(6);
							cprintf("%c",ulight); 
						}
						else 
						{ 
							textcolor(7); 
							cprintf("%c",ulight); 
							
						}
	}
	
	while (!feof(p))
	{
		ch=fgetc(p);
		cout<<ch;
	}

	fclose(p);



}
Да-да, навигация с помощью fseek. Сегодня получил зачет за эту работу. Оцените степень извращенности?
eduard93 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с символами в цикле cheef PHP 2 14.01.2011 18:21
Работа с символами.Паскаль Андрюха74 Помощь студентам 2 10.06.2010 16:08
Работа с русскими символами... Sota Помощь студентам 5 31.05.2008 18:44
Задачка на работу с символами и строками Go6a Помощь студентам 10 30.03.2008 16:31