Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
AlexM24
10 / 10 / 11
Регистрация: 09.12.2014
Сообщений: 89
1

Перемешивание строк в массиве

05.02.2015, 12:45. Просмотров 1014. Ответов 5
Метки нет (Все метки)

Не могу разобраться, почему прога работает косячно
Программа получает из файла строки, записывает их в массив, массив перемешивает, записывает результат в файл.
Результат работы:
Название: Снимок.JPG
Просмотров: 27

Размер: 18.3 Кб
Код программы:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <time.h>
 main() {
 int i=0,random,N=7;
 char base[N][1000],buf[1000],end[N][1000];
 FILE *fo,*fi;
 srand(time(NULL));
 fo=fopen( "in.txt", "r"); 
 while (!feof(fo)){ // загоняю файл в массив
             fscanf(fo,"%s",base[i]);
       i++;
       }
fclose(fo);
 
i=0;
while (N>0){
 random=0+rand()%N;     
while (base[random][i]!=0){ // перемешиваю
      buf[i]=base[random][i];
      base[random][i]=base[N-1][i];
      base[N-1][i]=buf[i];
      i++;
      }
      i=0;
N--;
}
 
fi=fopen( "out.txt", "w"); 
i=0;N=7;
while (i<N){ // загоняю массив в файл
             fprintf(fi,"%s\n",base[i]);
       i++;
       }
fclose(fi);
getchar();
}
Помогите понять где косяк. Хочу предупредить, что указателями пользоваться не умею.пока что.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2015, 12:45
Ответы с готовыми решениями:

Перемешивание байтов
Необходимо в заданном файле случайным образом поменять местами байты, при этом число перестановок и...

Сортировка строк в многомерном массиве
Здравствуйте! Есть такое задание, дана матрица (m,n) и в ней нужно отсортировать строки по...

Удаление и дополнение строк в массиве
Такой вопрос: нужно удалит строки в массиве, содержащие минимальное значение массива, дополняя его...

Сортировка строк в массиве по первому слову
Добрый день!подскажите,как реализовать функцию,которая принимает двумерный строчный массив, и...

Как подсчитать количество строк в массиве?
Как подсчитать количество строк в массиве ? #include &lt;stdio.h&gt; #define N 80 int main () { ...

5
Phoenix_Max
101 / 43 / 18
Регистрация: 08.01.2015
Сообщений: 97
05.02.2015, 13:00 2
Ты зачем-то в словах еще буквы перемешиваешь

вот так нужно ?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <string.h>
#include <stdio.h>
#include <time.h>
#define  N  7
main() {
    int i = 0, random;
 
    char base[7][100] = {"pop","rock","folk","art","classic","electro", "disco"},
        buf[100];
    srand(time(NULL));
    i = N;
    while (i>0){
        random = 0 + rand() % N;
    
        strcpy( buf,base[random]);
        strcpy(base[random],base[i - 1]);
        strcpy(base[i - 1], buf);
        i--;
    }
    i = 0;
    while (i<N){ // загоняю массив в файл
        printf( "%s\n", base[i]);
        i++;
    }
    getchar();
}
1
AlexM24
10 / 10 / 11
Регистрация: 09.12.2014
Сообщений: 89
05.02.2015, 13:32  [ТС] 3
Phoenix_Max,
Цитата Сообщение от Phoenix_Max Посмотреть сообщение
Ты зачем-то в словах еще буквы перемешиваешь
Я не специально перемешиваю, ОНА САМА!
Ваша программа просто блеск! А можно обойтись без "strcpy"? И еще - Если строка состоит из нескольких слов, Ваша прога заменяет строку.
Пример работы:
Название: Снимок1.JPG
Просмотров: 24

Размер: 20.0 Кб
0
Phoenix_Max
101 / 43 / 18
Регистрация: 08.01.2015
Сообщений: 97
05.02.2015, 13:33 4
у меня нет слова жопа ))
1
AlexM24
10 / 10 / 11
Регистрация: 09.12.2014
Сообщений: 89
05.02.2015, 13:47  [ТС] 5
Цитата Сообщение от Phoenix_Max Посмотреть сообщение
у меня нет слова жопа ))
Действительно - нету... Ну так и чтения из файла в вашей программе тоже нет.
Это я из своего файла взял. Подставил в свою программу в место, где осуществлял перемешивание, Ваш код:
C
1
2
3
4
5
6
7
while (i>0){
        random = 0 + rand() % N;
        strcpy( buf,base[random]);
        strcpy(base[random],base[i - 1]);
        strcpy(base[i - 1], buf);
        i--;
    }
Но по факту даже с Вашим замечательным кодом моя прога больше одного слова в строке не воспринимает
0
Phoenix_Max
101 / 43 / 18
Регистрация: 08.01.2015
Сообщений: 97
05.02.2015, 14:06 6
Лучший ответ Сообщение было отмечено AlexM24 как решение

Решение

strcpy это функции для копирование строк, если не подходит напишите свою
функцию.
хотя это не трудно
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
char* strcpy(char * dest, const char * src)
{
  char* result = dest;
  if((NULL != dest) && (NULL != src))
  {
    while (NULL != *src)
    {
      *dest++ = *src++;
    }
    *dest_ptr = NULL;
  }
  return strresult;
 
}/
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <time.h>
 
main() {
    int i = 0, random, N = 0;
 
    char base[100][100],
        buf[100];
    srand(time(NULL));
    FILE *fo, *fi;
    fo = fopen("in.txt", "r");
    while (!feof(fo)){ // загоняю файл в массив
        fgets(base[N], 100, fo);
        N++;
    }
    fclose(fo);
 
    i = N;  
    while (i>0){
        random =  rand() % N;
        strcpy( buf,base[random]);
        strcpy(base[random],base[i - 1]);
        strcpy(base[i - 1], buf);
        i--;
    }
    i = 0;
 
    fi = fopen("out.txt", "w");
    while (i<N){ // загоняю массив в файл
        fputs(base[i], fi);
        i++;
    }
    getchar();
}
1
05.02.2015, 14:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2015, 14:06

Как правильно инициализировать несколько строк в 1 массиве?
у меня есть след код: char allowedFlags = {&quot;size&quot;, &quot;port&quot;, &quot;soft&quot;}; у меня компилятор выдает...

Разобраться с динамическим выделением памяти в массиве строк
Здравствуйте. Помогите разобраться с динамическим выделением памяти в массиве строк. Нашел в сети...

Разработать программу, проводящую перемешивание колоды карт путем сдвига и перестановки ее частей
Не представляю как это написать( Буду благодарен за любую подсказку. Создать двунаправленный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru