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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2014, 19:10   #1
Wysler
Пользователь
 
Регистрация: 30.10.2014
Сообщений: 14
По умолчанию Вывести слова в порядке возрастания их длин на си

Собственно я хотел сначала записать строку в двумерный символьный массив по словам(1 слово = 1 строка), затем как-то отсортировать их и вывести. Вот мой текст программы без сортировки:
Код:
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <string.h>
 
int main(void)
{
    setlocale(LC_ALL, "Russian");
	const int N=100;//Максимальная длина строки
	char str1[N],str2[N][N]={0};
	int i,j;
	printf("Введите строку не более %d символов: ",N);gets(str1);
	for(j=0;j<N-1;j++)
	do
		for(i=0;i<N-1;i++)
		str2[j][i]=str1[i];
	while(str1[i]!=' ');
	for(i=0;i<N-1;i++)
	{
		puts(str2[i]); // Cомневаюсь что так можно
		printf("\n\n");
	}

	system("pause");

}
Но программа ничего не выводит.
Wysler вне форума Ответить с цитированием
Старый 13.11.2014, 19:26   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
// Cомневаюсь что так можно
сунь str2[i] в printf().
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 13.11.2014, 19:38   #3
Wysler
Пользователь
 
Регистрация: 30.10.2014
Сообщений: 14
По умолчанию

Переписал так:
Код:
for(i=0;i<N-1;i++)
    printf("%s\n\n",str2[i]);
Все еще ничего не выводит
Wysler вне форума Ответить с цитированием
Старый 13.11.2014, 19:49   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Все еще ничего не выводит
ну так прогони под дебаггером и выясни, почему строки str2[i] пустые.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 13.11.2014, 19:57   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
for(i=0;i<N-1;i++)
str2[j][i]=str1[i];
Я что-то не понял логики. Как тут слова-то разворачиваются в массив?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.11.2014, 20:15   #6
Wysler
Пользователь
 
Регистрация: 30.10.2014
Сообщений: 14
По умолчанию

Идем по введенной строке и копируем символы в 0 строку двумерного массива, пока не встретим пробел, затем переходим на 1 строку и т.д.

А вообще программа не доходит до вывода массива. Т.е. ошибка в самом цикле.

Последний раз редактировалось Stilet; 13.11.2014 в 21:00.
Wysler вне форума Ответить с цитированием
Старый 13.11.2014, 21:00   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
копируем символы в 0 строку двумерного массива, пока не встретим пробел
Э-э-э... Я тебя разочарую
Копируются все символы до конца. Т.е. создается куча копий строки. Ведь в цике у тебя условия появления пробела нет )
Цитата:
программа не доходит до вывода массива.
Как выше советовали, отладчиком ты конечно пройтись не желаешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.11.2014, 21:08   #8
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

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

#define MAX_LEN 100

int main()
{
    //setlocale(LC_ALL, "Russian");
    
    char str[MAX_LEN];
    char array[MAX_LEN][MAX_LEN];
    int i, len;
    int word = 0, index = 0;
    
    printf("Your string, max length: %d\r\n", MAX_LEN);
    gets(str);    
    
    //разделяем слова и вносим их в двумерный в массив
    len = strlen(str);
    for(i=0; i<len; i++, index++) {
        if(str[i] == ' ') {
            array[word][index] = '\0'; //обязательно заканчиваем строку нулём, чтобы не потерять конец
            word++;
            index = -1; //в следующей итерации цикла увеличится до нуля
            continue;
        }
        
        array[word][index] = str[i];
    }
    
    //количество слов - на единицу больше индекса последнего слова
    word++;
    
    //выводит что получилось в массиве array
    for(i=0; i<word; i++) {
        printf("word #%d: %s\r\n", i, array[i]);
    }
    
    return 0;
}
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Старый 13.11.2014, 21:37   #9
Wysler
Пользователь
 
Регистрация: 30.10.2014
Сообщений: 14
По умолчанию

Эта программа выводит кучу непонятных символов после слов, но общий смысл я уловил и исправил в своей:
Код:
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <string.h>
 
int main(void)
{
    setlocale(LC_ALL, "Russian");
	const int N=100;//Максимальная длина строки
	char str1[N],str2[N][N]={'/0'};
	int i,word,index;
	printf("Введите строку не более %d символов: ",N);gets(str1);
	word=index=0;
	for(i=0;i<N;i++,index++)
	{
		if(str1[i]==' ')
		{
			
			str2[word][index]='\0';
			index=-1;
			word++;
		}
		else str2[word][index]=str1[i];
	}

	
	for(i=0;i<word+1;i++)
		printf("%s\n\n",str2[i]);
		
	

	system("pause");

}
Теперь все работает. Спасибо огромное))

Последний раз редактировалось Wysler; 13.11.2014 в 21:39.
Wysler вне форума Ответить с цитированием
Старый 13.11.2014, 21:55   #10
Wysler
Пользователь
 
Регистрация: 30.10.2014
Сообщений: 14
По умолчанию

Возник вопрос по поводу функции strcpy и двумерного массива. Т.е. могу ли я написать:
Код:
strcpy(str2[i],str2[i+1]);
И надеяться, что программа скопирует содержимое, скажем ,2 строки двумерного символьного массива в 1?
То же самое по поводу функции strlen:
Код:
if(strlen(str2[i+1])<strlen(str2[i]))
Сравнится ли здесь длина двух строк двумерного массива или это делается по другому?
Wysler вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив. Вывести вначале все четные числа в порядке возрастания их индексов, затем - все нечетные в порядке убывания.( Delphi ) simonte Помощь студентам 9 07.12.2013 06:54
Вывести слова предложения в таком порядке, чтобы последняя буква каждого слова совпадала с первой буквой следующего слова ( java ) huhu Помощь студентам 0 06.04.2012 19:42
Вывести в порядке возрастания кодов все буквы латинского алфавита. Zzoyberg Помощь студентам 0 28.12.2011 03:10
Вывести в порядке возрастания кодов все буквы латинского алфавита. Zzoyberg Паскаль, Turbo Pascal, PascalABC.NET 3 07.12.2011 16:10
На печать выдать новую строку в которой все слова расположены в порядке возрастание длин слов Siluet Паскаль, Turbo Pascal, PascalABC.NET 1 13.12.2008 00:12