С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/50: Рейтинг темы: голосов - 50, средняя оценка - 4.86
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
1

Двумерный массив строк

17.04.2010, 23:38. Показов 10328. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите реализовать двумерный массив строк...чтобы с клаиватуры можно было вводить размерность массива и каждую ячейку заполнить словом, вводимым с клавиатуры.

Добавлено через 17 минут
Уже разобрался)

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
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main()
{
    int i,j,N,M;
    
    printf("Vvod razmernosti massiva\n");
    scanf("%d%d",&M,&N);
char* arrsym[M][N];
 for( i = 0; i < M; i++)
     for( j = 0; j < N; j++){
     arrsym[i][j] = (char*) malloc(256);
     std::cin >> arrsym[i][j];
     }
   std::cout << std::endl;
   std::cout << std::endl;
 for( i = 0; i < M; i++){
     for( j = 0; j < N; j++)
        std::cout << arrsym[i][j] << "   ";
        std::cout << std::endl;
 }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2010, 23:38
Ответы с готовыми решениями:

Переписать массив строк из файла в двумерный массив
Переписать массив строк из файла в двумерный массив типа CHAR &quot; char Map&quot; вот что получается,...

Двумерный массив и сравнение строк
Дана целочисленная матрица размера M x N. Различные строки матрицы назовем похожими, если совпадают...

Двумерный динамический массив строк
Надо создать двумерный динамический массив размером 5x5 (5 ячеек, для 5 строк). Заполнить его...

Двумерный массив, сумма строк
подскажите как сделать так, чтобы считало строки и выводило их сумму у меня не получается...

18
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
18.04.2010, 14:48 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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <vector>
#include <conio.h>
#include <iomanip>
#include <cstring>
 
void strokMas(std::vector< std::vector<std::string> > &mas, const int ROWS, const int COLS);
 
int main()
{
    int ROWS=0;
    int COLS=0;
    std::cin>>ROWS;
    std::cin>>COLS;
 
    std::vector< std::vector<std::string> > mas(ROWS,std::vector<std::string>(COLS));
    strokMas(mas,ROWS,COLS);
    return 0;
}
 
void strokMas(std::vector< std::vector<std::string> > &mas, const int ROWS, const int COLS){
    int i=0;
    std::string word;
    while (i<ROWS){
        int j=0;
        while (j<COLS){
            std::cout<<"Vvedite slovo v yacheiky"<<"["<<i<<"]["<<j<<"]  :";
            std::cin>>word;
            mas[i][j]=word;
            ++j;
        }
        ++i;
    }
 
    for (int i=0; i<ROWS; i++){
        for (int j=0; j<COLS; j++){
            std::cout<<std::setw(9)<<mas[i][j];
        }
        std::cout<<std::endl;
    }
}
1
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
21.04.2010, 19:17  [ТС] 3
Подскажите пожалуйста как проверить слово в каждой ячейке на повторяющиеся символы? Если они есть, то заменить слово заглавными буквами...

Тут как бы нужно посимвольно пробегаться по каждой строке. Как это сделать для каждой ячейки?

Добавлено через 18 часов 3 минуты
Сам принцип поиска повторяющихся символов понятен, как это применить к каждой ячейке матрицы?
0
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
21.04.2010, 19:25 4
Цитата Сообщение от inferno mf Посмотреть сообщение
как это применить к каждой ячейке матрицы?
в цикле
0
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
21.04.2010, 19:29  [ТС] 5
Цитата Сообщение от PointsEqual Посмотреть сообщение
в цикле
понятно, что в цикле ...как это правильно сделать? сначала идем по i-тым элементам при j=0, проверям есть ли в строке повторяющиеся символы, потом j++, так правильно?
0
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
26.04.2010, 02:22  [ТС] 6
Не получается осуществить поиск ячеек в которых есть слова с неповторяющимеся символами(( помогите кто-нибудь пожалуйста разобраться
0
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
26.04.2010, 04:54 7
может есть и поудобней вариант, но я могу предложить такой:
для уточнения, в ячейке массива строк находится слово или строка?
если слово, тогда сверяем в words[i][j]:
C++
1
2
3
4
5
6
7
8
counter = 0;
for(i = 0; i < n; i++)
    for(j = 0; j < strlen(words[i]); j++){
        for(x = 1+j; x < strlen(words[i]); x++)
            if(words[i][j] == words[i][j+x])
                i++;
        counter++;
    }
т.е. сверяем все символы по порядку с данным словом начиная с символа на котором остановились, чтоб не проходить повторно символы стоящие до символа который мы сравниваем(тавтология)
counter выдаст нам число слов с неповторяющимися знаками
1
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
26.04.2010, 18:40  [ТС] 8
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
37
38
#include <cstdlib>
#include <iostream>
#include <cstring>
 
using namespace std;
 
int main()
{
    int i,j,N,M;
    
    printf("Vvod razmernosti massiva\n");
    scanf("%d%d",&M,&N);
char* arrsym[M][N];
 for( i = 0; i < M; i++)
     for( j = 0; j < N; j++){
     arrsym[i][j] = (char*) malloc(256);
     std::cin >> arrsym[i][j];
     }
   std::cout << std::endl;
   std::cout << std::endl;
 for( i = 0; i < M; i++){
     for( j = 0; j < N; j++)
        std::cout << arrsym[i][j] << "   ";
        std::cout << std::endl;
 }
  int x;
  int counter = 0;
for(i = 0; i < M; i++)
    for(j = 0; j < strlen(arrsym[i]); j++){
        for(x = 1+j; x < strlen(arrsym[i]); x++)
            if(arrsym[i][j] == arrsym[i][j+x])
                i++;
        counter++;
    }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Вот , что получилось, но не компилится((( Ошибка - cannot convert 'char** ' to const char for argument '1 ' to size_t strlen(const char).

Ну вообще по заданию в ячейке строка, слово это же и есть строка...или есть какое-то отличие?
0
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
26.04.2010, 18:53 9
Цитата Сообщение от inferno mf Посмотреть сообщение
слово это же и есть строка...или есть какое-то отличие?
есть примитивные строки(char) и string строки
1
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
26.04.2010, 20:38  [ТС] 10
в моем случае это повидимому string строки...как с ними здесь осуществить поиск ячеек в которых есть строки с неповторяющимеся символами?

Даже если в ячейках должны быть слова, то почему не работает код?((( что там не так?((
0
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
26.04.2010, 20:44 11
Цитата Сообщение от inferno mf Посмотреть сообщение
в моем случае это повидимому string строки...
неа)

Цитата Сообщение от inferno mf Посмотреть сообщение
как с ними здесь осуществить поиск ячеек в которых есть строки с неповторяющимеся символами?
если честно, я плохо понимаю что происходит в том коде
0
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
29.04.2010, 01:33  [ТС] 12
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
37
38
#include <cstdlib>
#include <iostream>
#include <cstring>
 
using namespace std;
 
int main()
{
    int i,j,N,M;
    
    printf("Vvod razmernosti massiva\n");
    scanf("%d%d",&M,&N);
char* arrsym[M][N];
 for( i = 0; i < M; i++)
     for( j = 0; j < N; j++){
     arrsym[i][j] = (char*) malloc(256);
     std::cin >> arrsym[i][j];
     }
   std::cout << std::endl;
   std::cout << std::endl;
 for( i = 0; i < M; i++){
     for( j = 0; j < N; j++)
        std::cout << arrsym[i][j] << "   ";
        std::cout << std::endl;
 }
  int x;
  int counter = 0;
for(i = 0; i < M; i++)
    for(j = 0; j < strlen(arrsym[i]); j++){
        for(x = 1+j; x < strlen(arrsym[i]); x++)
            if(arrsym[i][j] == arrsym[i][j+x])
                i++;
        counter++;
    }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
В чем заключается ошибка cannot convert 'char** ' to const char for argument '1 ' to size_t strlen(const char) ? Как сделать проверку на повторяющиеся символы в ячейках?(((
0
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
29.04.2010, 01:48 13
Цитата Сообщение от inferno mf Посмотреть сообщение
В чем заключается ошибка cannot convert 'char** ' to const char for argument '1 ' to size_t strlen(const char) ?
C++
1
2
for(j = 0; j < strlen(*arrsym[i]); j++){
        for(x = 1+j; x < strlen(*arrsym[i]); x++)
Добавлено через 2 минуты
inferno mf, а что вообще пытаешся сделать?
0
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
29.04.2010, 01:56  [ТС] 14
Цитата Сообщение от PointsEqual Посмотреть сообщение
C++
1
2
for(j = 0; j < strlen(*arrsym[i]); j++){
        for(x = 1+j; x < strlen(*arrsym[i]); x++)
Добавлено через 2 минуты
inferno mf, а что вообще пытаешся сделать?
это неверно((( ну вообще хотелось посимвольно пробежаться по всем ячейкам...и потом определить кол-во ячеек с повторяющимеся символами...
0
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
29.04.2010, 02:36 15
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
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <cstring>
#include <iomanip>
 
int main()
{
    int count_row=0;
    int count_col=0;
 
    std::cout<<"vvedite kol-vo ctrok massiva= ";
    std::cin>>count_row;
    std::cout<<std::endl<<"vvedite kol-vo ctolbcov massiva= ";
    std::cin>>count_col;
    std::cout<<std::endl;
 
 
    /*выделяем память под динамический массив*/
    char** pArray=new char*[count_col];
     for (int i=0; i<count_col; i++)
     pArray[i]=new char[count_row];
 
 
 
     /*заполнение*/
    for (int i=0; i<count_row; i++)
    for (int j=0; j<count_col; j++){
             std::cout<<"vvedite ["<<i<<"]["<<j<<"] element= ";
             std::cin>>pArray[i][j];
    }
 
 
    /*вывод*/
    std::cout<<std::endl<<"Massiv simvolov sfornirovan: "<<std::endl;
    for (int i=0; i<count_row; i++){
        for (int j=0; j<count_col; j++){
            std::cout<<std::setw(3)<<pArray[i][j];
        }
        std::cout<<std::endl;
    }
 
 
    /*поиск ячеек с повторяющимися элементами*/
 
 
    return EXIT_SUCCESS;
}
1
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
29.04.2010, 02:57 16
Цитата Сообщение от inferno mf Посмотреть сообщение
ну вообще хотелось посимвольно пробежаться по всем ячейкам...и потом определить кол-во ячеек с повторяющимеся символами...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstring>
 
int main(){ 
    int i, j, m, c = 0;
        const int size = 4;
    char str[size][5] = {{"abba"}, {"aaad"}, {"abcd"}, {"abcd"}};
    for(m = 0; m < size; m++)
        for(i = 0; i < strlen(str[m]); i++)
            for(j = i+1; j < strlen(str[m]); j++)
                if(str[m][i] == str[m][j]){
                    c++;
                    m++;
                    i = 0;
                    j = i+1;
                }
    std::cout << c << std::endl;
 
    system("pause");
    return 0;
}
ответ будет 2, т.к. символы повторяются именно в 2ух ячейках
1
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
29.04.2010, 16:27  [ТС] 17
Цитата Сообщение от PointsEqual Посмотреть сообщение
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
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <cstring>
#include <iomanip>
 
int main()
{
    int count_row=0;
    int count_col=0;
 
    std::cout<<"vvedite kol-vo ctrok massiva= ";
    std::cin>>count_row;
    std::cout<<std::endl<<"vvedite kol-vo ctolbcov massiva= ";
    std::cin>>count_col;
    std::cout<<std::endl;
 
 
    /*выделяем память под динамический массив*/
    char** pArray=new char*[count_col];
     for (int i=0; i<count_col; i++)
     pArray[i]=new char[count_row];
 
 
 
     /*заполнение*/
    for (int i=0; i<count_row; i++)
    for (int j=0; j<count_col; j++){
             std::cout<<"vvedite ["<<i<<"]["<<j<<"] element= ";
             std::cin>>pArray[i][j];
    }
 
 
    /*вывод*/
    std::cout<<std::endl<<"Massiv simvolov sfornirovan: "<<std::endl;
    for (int i=0; i<count_row; i++){
        for (int j=0; j<count_col; j++){
            std::cout<<std::setw(3)<<pArray[i][j];
        }
        std::cout<<std::endl;
    }
 
 
    /*поиск ячеек с повторяющимися элементами*/
 
 
    return EXIT_SUCCESS;
}

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

Добавлено через 31 минуту
Цитата Сообщение от Vorona Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstring>
 
int main(){ 
    int i, j, m, c = 0;
        const int size = 4;
    char str[size][5] = {{"abba"}, {"aaad"}, {"abcd"}, {"abcd"}};
    for(m = 0; m < size; m++)
        for(i = 0; i < strlen(str[m]); i++)
            for(j = i+1; j < strlen(str[m]); j++)
                if(str[m][i] == str[m][j]){
                    c++;
                    m++;
                    i = 0;
                    j = i+1;
                }
    std::cout << c << std::endl;
 
    system("pause");
    return 0;
}
ответ будет 2, т.к. символы повторяются именно в 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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <cstdlib>
#include <iostream>
#include <cstring>
 
using namespace std;
 
int main()
{
    int i,j,N,M;
    
    printf("Vvod razmernosti massiva\n");
    scanf("%d%d",&M,&N);
char* arrsym[M][N];
printf("Vvod dannyh po strokam\n");
 for( i = 0; i < M; i++)
     for( j = 0; j < N; j++){
     arrsym[i][j] = (char*) malloc(256);
     std::cin >> arrsym[i][j];
     }
   std::cout << std::endl;
   std::cout << std::endl;
   printf("Ishodnaya matrica\n");
 for( i = 0; i < M; i++){
     for( j = 0; j < N; j++)
        std::cout << arrsym[i][j] << "   ";
        std::cout << std::endl;
 }
 
 /* поиск ячеек с повторяющимеся символами   */
 int m,c=0;
  for(m = 0; m < i; m++)
                for(i = 0; i < strlen(*arrsym[m]); i++)
                        for(j = i+1; j < strlen(*arrsym[m]); j++)
                                if(arrsym[m][i] == arrsym[m][j]){
                                        c++;
                                        m++;
                                        i = 0;
                                        j = i+1;
                                }
        std::cout << c << std::endl;
 
  
  
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
постоянно 0 выдает(((
0
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
29.04.2010, 20:05 18
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <cstring>
#include <iomanip>
#include <vector>
#include <conio.h>
 
int main()
{
    int rows=0;
    int cols=0;
 
    std::cout<<"kol-vo strok= ";
    std::cin>>rows;
    std::cout<<"kol-vo stolbcov= ";
    std::cin>>cols;
 
    std::vector< std::vector<std::string> > wordmas(rows, std::vector<std::string>(cols));
 
    for (int i=0; i<rows; i++)
    for (int j=0; j<cols; j++){
             std::cout<<"vvedite ["<<i<<"]["<<j<<"] element= ";
             std::cin>>wordmas[i][j];
    }
 
    std::cout<<std::endl<<"Massiv  sfornirovan: "<<std::endl;
    for (int i=0; i<rows; i++){
        for (int j=0; j<cols; j++){
            std::cout<<std::setw(9)<<wordmas[i][j];
        }
        std::cout<<std::endl;
    }
 
    std::vector< std::vector<std::string> >::iterator p1=wordmas.begin();
 
    int cnt=0;
    int i=0;
    while (i<rows){
        int j=0;
        while (j<cols){
            int ii=0;
            while (ii<rows){
                int jj=0;
                while(jj<cols){
                    if (ii>=i && jj>=j){
                        ii=rows;
                        break;
                    } if ( wordmas[ii][jj]==wordmas[i][j] ){
                            ++cnt;
                            std::cout<<wordmas[ii][jj]<<std::endl;
                            ii=rows;
                            break;
                      }
                      ++jj;
                }
                ++ii;
            }
            ++j;
        }
        ++i;
    }
 
    std::cout<<"Count repetition words = "<<cnt;
    getch();
 
    return EXIT_SUCCESS;
}
в строковом массиве
hel hel tor
hel abc sdf
sdf hel lkj

будет 4 повтора, а именно:

здесь 4 hel - 1 оригинал и 3 повторных
2 sdf - 1 оригинал и 1 повторяющихся
Миниатюры
Двумерный массив строк  
0
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
29.04.2010, 20:07 19
+ я еще сделал чтобы повторяющиеся слова выводились на экран , для ясности
0
29.04.2010, 20:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2010, 20:07
Помогаю со студенческими работами здесь

Двумерный массив.Замена строк
Ребят проблемка назрела.. Нужно ввести номера строк, которые хотим поменять местами. Проблема вот...

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

Двумерный массив с рандомным количеством строк
Здравствуйте. Пишу одну программку в VS2012 и не могу понять, возможно ли создать двумерный массив...

Дан двумерный массив из m строк и n столбцов
Дан двумерный массив из m строк и n столбцов. Заполнить его значениями элементов одномерного...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru