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

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

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

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

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

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

Суть задачи:
в каждой строке файла names.txt записано какое-то имя.Написать функцию, которая переместит в последнюю строку наибольшее с лексикографической точки зрения имя.

Мой код
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
void bubble_max(char *a, int size);
void swap(char &a, char &b);
int main()
{
    const int N=3;
    char name [N];
    int i;
    freopen("names.txt", "r", stdin);
    for(i=0; i<N; i++)
        scanf("%s", name[i]);
    for(i=0; i<N; i++)
        printf("%s\n", name[i]);
    getch();
    return 0;
}
void swap(char &a, char &b){
    char t=a;
         a=b;
         b=t;
}
void bubble_max(char *a, int size){
    int i;
    for(i=0; i<size-1; i++)
        if( strcmp(a[i],a[i+1]) > 0) swap(a[i], a[i+1]);
}
Подозреваю, что намудрила с пойнтером и переменной для функции strcmp. Запинается в предпоследней строке кода.
Пожалуйста, выведете на чистую воду
Maiden вне форума Ответить с цитированием
Старый 29.07.2010, 12:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Насколько я понял тебе нужно что-то вроде этого:
Код:
int len(char* c){
	int i=0;
	 for(;*c!=0;c++,i++);
	 return i;
}

void copy(char* c,char* c2){
	for(;*c!=0;c++){*c2=*c;c2++;}
	*c2=0;
}

int _tmain(int argc, _TCHAR* argv[])
{
	FILE* f=fopen("imena.txt","r");
	char s[255],ss[255];
	int m=0;
	while(!feof(f)){
		fscanf(f,"%s",&s);
		if(len(s)>m){
			m=len(s);
			copy(s,ss);
		}
		printf("\n%s\t%d",s,len(s));
	}
		printf("\n%s\t%d",ss,len(s));
	getchar();
	fseek(f,0,SEEK_END);
	fprintf(f,"\n%s",ss);
	fclose(f);
	return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.07.2010, 12:45   #3
D@rkD@iver
Форумчанин
 
Регистрация: 28.07.2009
Сообщений: 189
По умолчанию

if( strcmp(a[i],a[i+1]) > 0) swap(a[i], a[i+1]);
нопнятно зачем ты это сравниваешь... нужно передавать указатели на сроку
а не символы
пишу программы для студентов и школьников на Pascal, Delphi, C++, WINAPI, assembler
обучаю программированию на паскале(дистанционно);mail: hruslow@gmail.com
D@rkD@iver вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение строк Jasper92 Общие вопросы C/C++ 6 23.12.2009 12:49
Сравнение строк Rivendell Microsoft Office Excel 8 18.12.2009 10:29
С++. Сравнение строк maxlav Помощь студентам 8 25.06.2009 04:33
Сравнение строк Elm0 Паскаль, Turbo Pascal, PascalABC.NET 2 02.06.2008 09:31
Сравнение строк HOMER Общие вопросы Delphi 7 04.01.2008 05:53