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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2012, 20:16   #1
Vl.fom
Пользователь
 
Регистрация: 21.11.2011
Сообщений: 11
Вопрос Работа со строками. С++ Builder 6

Имеется задание:
Дана строка текста, состоящая из лексем разделенных пробелом.
Создайте новые лексемы, взяв по одному символу из старых лексем, не со
держащих цифр, расположив их после лексем, содержащих цифры.

Исходная строка:STOP 26Б4 STEP VOKRUS
Результат выполнения: 26Б4 SSV TTO OEK PPR U S
При выполнениии использовать функции strtok, isdigit, strcpy, strcat.
Отдельно реализовать эти функции после выполнения задания.

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

Код:
/*
Задание: Дана строка текста, состоящая из лексем разделенных пробелом.
Создайте новые лексемы, взяв по одному символу из старых лексем, не со-
держащих цифр, расположив их после лексем, содержащих цифры.
*/

//Подключаемые библиотеки

#include <stdio.h>   //  printf
#include <conio.h>   //  getch()
#include <string.h>  //  Операции со строками
#include <ctype.h>   // isdigid, isalpha
#include <windows.h> // function Rus

void main()
{
char* Rus(char* text);                       //Прототип ф-ии Rus
char  stroka[] = "U1UY M6Б4 B5V VOKRUS ";
char  strok[] =  "U1UY M6Б4 B5V VOKRUS "; //Исходная строка
char *token,rezult[]="";
char *tok;
int i,k,l;
printf(Rus("Исходная строка:\n\n"));
puts(Rus(stroka));
printf("\n\n");
token = strtok (stroka," ");  //Разделяем строку на токены(лексемы)

// Цикл записывает лексемы, содержащие цифры, в начало результирующей строки
     while (token != NULL)
  {
     char digit[]="";
     i=strlen(token);
         for (k=0;k<=i;k++)
        {
        if (isdigit(token[k])) strcpy(digit,token);
        }
      strcat(rezult,digit);
      l=strlen(rezult);
      if (l>0) strcat(rezult," ");
      token = strtok (NULL, " ");

  };
//  Не работает , нужно как-то подругому, как!? Цикл записывает лексемы, содержащие Только буквы, в промежуточную строку
char strings[]="";
tok = strtok (strok," ");
int a,b,c;

while (tok != NULL)
  {
     char alpha[]="";
     a=strlen(tok);
         for (b=1;b<=a;b++)
        {
        if (isalpha(tok[b])==false) tok = strtok (NULL, " ");
        else strcpy(alpha,tok);

     }
      strcat(strings,alpha);
      l=strlen(strings);
      if (l>0) strcat(strings," ");


  };
     printf(Rus("Промежуточная строка:\n\n"));
     puts(strings);
     printf("\n");
     printf(Rus("Результирующая строка:\n\n"));
     puts(rezult);
     getch();
}

//Определение ф-ии Rus
char* Rus(char* text)
{
 CharToOem(text,text);
 return text;
};

Последний раз редактировалось Vl.fom; 24.02.2012 в 20:21. Причина: Исправить
Vl.fom вне форума Ответить с цитированием
Старый 27.02.2012, 02:00   #2
Vl.fom
Пользователь
 
Регистрация: 21.11.2011
Сообщений: 11
По умолчанию

Никто не может помочь?
Vl.fom вне форума Ответить с цитированием
Старый 27.02.2012, 11:57   #3
microbit
Форумчанин
 
Аватар для microbit
 
Регистрация: 26.09.2011
Сообщений: 176
По умолчанию

Код:
#include <string.h>

void main()
{
	char	str_src[] = "TREWR2 TRREEW GTRDEW VOKRUS DKDWIFWWDW";
	char	stroka[50];
	char	result[50] = {0};
	char	str_tmp[50] = {0};
	int		max_len = 0,tmp;
	char	*token;
	strcpy(stroka,str_src);
	token = strtok (stroka," ");
	while (token != NULL)
	{
		tmp = strlen(token);
		for(int c=0;c<tmp;c++)
		{
			if(token[c]>='0' && token[c]<='9')
			{
				strcat(result,token);
				strcat(result," ");
				break;
			}
			else if(max_len<tmp)max_len=tmp;
		}		
		token = strtok (NULL," ");
	}

	int step = 0;
	for(int i=0;i<max_len;i++)
	{
		strcpy(stroka,str_src);
		token = strtok (stroka," ");
		while(token != NULL)
		{
			bool dig = false;
			tmp = strlen(token);
			for(int c=0;c<tmp;c++)
			{
				if(token[c]>='0' && token[c]<='9')
				{
					dig = true;
					break;
				}
			}
			if(!dig && i < tmp)
			{
				str_tmp[step] = token[i];
				step++;
			}
			token = strtok (NULL," ");
		}
		strcat(str_tmp," ");
		step++;
	}
	strcat(result,str_tmp);
}
microbit вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со строками. (С) Bezukhoff Помощь студентам 0 26.12.2011 21:20
работа со строками missg Помощь студентам 3 09.11.2011 16:36
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
Работа с строками. Qwerty91 Помощь студентам 2 15.12.2009 22:07
C++ Builder Работа со строками файлов Ya_Nika C++ Builder 2 08.03.2008 02:47