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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2012, 20:11   #1
Frostmind
Новичок
Джуниор
 
Регистрация: 07.11.2012
Сообщений: 2
По умолчанию Работа со строками С.

Начну сразу с того что задача по лабе идет, мне это не горит, но разобраться я хочу , жизненная проблема в том что строки понимаю хуже всего, нашел на паскале аналог этой задачи, только наоборот. Пытался переделать под Си, не получилось все равно сделать.
Обьясните как сделать пожалуйста( какие функйии по работе со строками использовать или кодом) и если есть примеры работы со строками именно в чистом С скиньте в темку.
Сформировать строку в которой слова исходной записаны в порядке убывания длин
Код получился такой

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

void  vvod (char []);
void vivod (char []);
void strok (char [], char [],char[]);
void vivoda (char []);

int main(void)
{
char x[80]; 
char a[80];
char d[80]; 
  vvod(x);
  vivod(x);
  strok(x,a,d);
  vivoda(a);
}

void vvod(char x[])
{ 
char s,ss;
int n;
 for (n=0; n<=79; n++)
	{
    x[n]=0;
    }
 for (n=0, s=' '; n<=79; n++)
	{
    ss=s; 
	s=getchar(); 
    if (s=='.') break;
	x[n]=s;
    }
}

void vivod(char x[])
{ 
     printf("%s \n",x);
}

void vivoda(char a[])
{
    printf("%s \n",a);

}
вот здесь уже и начинается переделка
Код:
void strok(char x[], char a[], char d[])
{
int	i,j,k;
char p;
k=1;

for (i=0; i<strlen(x); i++)
	{if (x[i]==' ' || x[i]=='\t') 
	  k++; 
	  else 
      d[k]+=x[i];
     }
for (i=1; i<k-1; i++)
for (j=1; j<k-1; j++)
   if ((d[j])<d[j+1]) ---> в паскале здесь стоит length(d[i]) я пытался использовать strlen вместо него но он ругался что char* и тип char
   {
	 p=d[j];
	 d[j]=d[j+1];
	 d[j+1]=p;
    }
for (i=1; i<k; i++)
    a+=d[i] + ' ';
}

Последний раз редактировалось Stilet; 07.11.2012 в 23:07.
Frostmind вне форума Ответить с цитированием
Старый 07.11.2012, 22:32   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Frostmind
твой код очень тяжело читать, к тому же неясен алгоритм.

накидал тут тебе:
http://ideone.com/gtY5EF

словом считаю группу букв, а не как ты пытался, искать слово до пробела (в таком случае тебе следовало и учитывать все знаки препинания, все whitespace и тд). это поведение легко изменить (в функции get_word).

разбирайся.
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; 08.11.2012 в 01:07.
pproger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
Работа со строками Pormonik Помощь студентам 0 20.05.2010 23:44
Си Работа со строками... amerhant Общие вопросы C/C++ 0 24.01.2010 00:29