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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2009, 07:18   #1
savra
search money
Пользователь
 
Регистрация: 12.10.2009
Сообщений: 46
По умолчанию Си. Слова в строке

Помогите с программой.

Дана строка. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Если слово содержит нечетное количество символов, то в таком слове следует удалить букву, находящуюся по середине.


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

void main()
{
  clrscr();
  //start

  char stroka[50];
  printf("\nВведите строку: \n");
  gets(stroka);
  printf("Вы ввели: %s", stroka);
  //dalee

  int i, k;

  for(i=0;i < stroka[i];i++)
  {

  }
  printf("\nДлина строки: %d\n", i);
  int p=0;
  for(k=i;k>=0;k--)         //idem ot konca massiva k ero nachalu
  {
    if(stroka[k]==' ')
    {       for(int y=k;y<i || stroka[y]!=' ';y++)
      {
        p++;
      }
      if(p%2!=0)
      {
      int count = 0;
        for(int n=y+1;n>k;n--)
        {                stroka[n+1]=stroka[n];
                stroka[y+1]=' ';
                count++;i++;
        }
        stroka[k+(p+1/2)]='_';
      }
    }
  }

  printf("itogo: %s", stroka);
  getch();
}
savra вне форума Ответить с цитированием
Старый 11.12.2009, 07:48   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предлагаю такой вариант:
Код:
{
  char stroka[50],slovo[50]="";
  printf("\nВведите строку: \n");
  gets(stroka);
  int k=0;
  for(int i=0;i<=strlen(stroka);i++){
   if((stroka[i]!=' ')&&(i!=strlen(stroka))){
	 slovo[k++]=stroka[i];
   } else{
	if (k%2==0) {
	   printf("%s",slovo);
	} else {
	 for(int l=0;l<strlen(slovo);l++){
	  if(l!=strlen(slovo)/2){printf("%c",slovo[l]);}
	 }
	}
	strset(slovo,0); k=0;  printf("\n");
   }
  }
  system("pause");
	return 0;
}
Пояснить или разберешся?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.12.2009, 18:57   #3
savra
search money
Пользователь
 
Регистрация: 12.10.2009
Сообщений: 46
По умолчанию

stilet спасибо большое!

Дело в том, что нам нельзя использовать функции из библиотеки <string.h>

Я переделал вот так

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
void main()
{
	 clrscr();
	 char stroka[50], slovo[50]="";
	 int k = 0, dlina_str = 0, i, dlina_slovo = 0;
	 
	 printf("Введите строку: ");
	 gets(stroka);
	 printf("Вы ввели %s", stroka);

	 for(i = 0; i < 50; i++)
	 {
			if(stroka[i] == '\0') break;
			else dlina_str++;
	 }

	 printf("\nДлина строки = %d", dlina_str);

	 for(i = 0; i <= dlina_str; i++)
	 {
			if((stroka[i] != ' ')&&(i != dlina_str))
			{
				 slovo[k++] = stroka[i];
			}
			else
			{
				 if(k % 2 == 0)
				 {
						printf("\nСлово - %s", slovo);
				 }
				 else
				 {
						for(i = 0; i < 50; i++)
						{
							 if(slovo[i] == '\0') break;
							 else dlina_slovo++;
						}
					printf("\nДлина слова* = %d\n", dlina_slovo);

						for(int l = 0; l < dlina_slovo; l++)
						{
							 if(l != dlina_slovo / 2)
							 {
									printf("%c", slovo[l]);
							 }
						}
				 } 
				 strset(slovo, 0);
				 k = 0;
				 printf("\n");
			}
	 }
	 getch();
}
Почему когда, ввожу 2 слова, то происходит зацикливание? и выделяет вот эту строку: if(l != dlina_slovo / 2)

И вот я не понял как strset(slovo, 0) записать по другому(ну то есть сделать не используя эту функцию)
savra вне форума Ответить с цитированием
Старый 18.12.2009, 16:52   #4
savra
search money
Пользователь
 
Регистрация: 12.10.2009
Сообщений: 46
По умолчанию

Решил задачу, может кому то поможет... скидываю код

Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
clrscr();
	char str[255]={'\0'};
	char end_str[255]={'\0'};
	char pr[10]={'\0'};
	printf("Vvedite stroku:");
	gets(str);
	int u=0;
	int i=0;
	int kol_sim=0;
	int p=0;
	int tmp,tmp1;
	int g=0;
	int h=0;
	while(str[i]!='\0')
	{
		while(str[i]!=' ' && str[i]!='\0')
		{
			pr[p]=str[i];
			kol_sim++;
			p++;
			i++;
			if(str[i]==' ' || str[i]=='\0')
			{
	if((kol_sim%2)!=0)
	{
		tmp=(kol_sim/2);
		tmp=kol_sim-tmp;
		while(g!=kol_sim)
		{
			if(g!=tmp-1)
			{
				end_str[h]=pr[g];
				g++;
				h++;
			}
			else
			{
				g++;
			}
		}
	}
	else
	{
		while(g!=kol_sim)
		{
			end_str[h]=pr[g];
			h++;
			g++;
		}
	}

			}
		}
		end_str[h]=str[i];
		kol_sim=0;
		g=p=0;
		h++;
		i++;
	}
	i=0;
	printf("\n");
	while(end_str[i]!='\0')
	{
		printf("%c",end_str[i]);
		i++;
	}
	printf("\n");
	return getch();

}
savra вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перестановка в строке первого и последнего слова.. mihail0608 Общие вопросы C/C++ 16 08.12.2009 16:25
Минимальная длинна слова в строке Anarki Общие вопросы C/C++ 7 24.09.2009 20:39
Замена одного слова в string строке. Samopal Паскаль, Turbo Pascal, PascalABC.NET 8 19.04.2009 08:03
Си - Написать функцию, проверяющую наличие в строке заданного слова Cvetok Помощь студентам 1 14.05.2008 05:44