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

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

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

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

Добавлено через 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.04.2010, 23:38
Ответы с готовыми решениями:

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

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

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

18
ниначмуроФ
 Аватар для PointsEqual
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
18.04.2010, 14:48
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  [ТС]
Подскажите пожалуйста как проверить слово в каждой ячейке на повторяющиеся символы? Если они есть, то заменить слово заглавными буквами...

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

Добавлено через 18 часов 3 минуты
Сам принцип поиска повторяющихся символов понятен, как это применить к каждой ячейке матрицы?
0
ниначмуроФ
 Аватар для PointsEqual
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
21.04.2010, 19:25
Цитата Сообщение от inferno mf Посмотреть сообщение
как это применить к каждой ячейке матрицы?
в цикле
0
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
21.04.2010, 19:29  [ТС]
Цитата Сообщение от PointsEqual Посмотреть сообщение
в цикле
понятно, что в цикле ...как это правильно сделать? сначала идем по i-тым элементам при j=0, проверям есть ли в строке повторяющиеся символы, потом j++, так правильно?
0
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
26.04.2010, 02:22  [ТС]
Не получается осуществить поиск ячеек в которых есть слова с неповторяющимеся символами(( помогите кто-нибудь пожалуйста разобраться
0
Peace 2 all shining faces
 Аватар для Vorona
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
26.04.2010, 04:54
может есть и поудобней вариант, но я могу предложить такой:
для уточнения, в ячейке массива строк находится слово или строка?
если слово, тогда сверяем в 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  [ТС]
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
ниначмуроФ
 Аватар для PointsEqual
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
26.04.2010, 18:53
Цитата Сообщение от inferno mf Посмотреть сообщение
слово это же и есть строка...или есть какое-то отличие?
есть примитивные строки(char) и string строки
1
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
26.04.2010, 20:38  [ТС]
в моем случае это повидимому string строки...как с ними здесь осуществить поиск ячеек в которых есть строки с неповторяющимеся символами?

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

Цитата Сообщение от inferno mf Посмотреть сообщение
как с ними здесь осуществить поиск ячеек в которых есть строки с неповторяющимеся символами?
если честно, я плохо понимаю что происходит в том коде
0
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
29.04.2010, 01:33  [ТС]
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
ниначмуроФ
 Аватар для PointsEqual
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
29.04.2010, 01:48
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от 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
ниначмуроФ
 Аватар для PointsEqual
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
29.04.2010, 02:36
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
 Аватар для Vorona
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
29.04.2010, 02:57
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от 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
ниначмуроФ
 Аватар для PointsEqual
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
29.04.2010, 20:05
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
ниначмуроФ
 Аватар для PointsEqual
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
29.04.2010, 20:07
+ я еще сделал чтобы повторяющиеся слова выводились на экран , для ясности
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.04.2010, 20:07
Помогаю со студенческими работами здесь

Двумерный массив, сумма строк
подскажите как сделать так, чтобы считало строки и выводило их сумму у меня не получается #include &lt;iostream&gt; #include...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru