Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.97
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
#1

Работа с массивом char - C++

08.07.2010, 21:54. Просмотров 4426. Ответов 32
Метки нет (Все метки)

Добрый день.
Объясните, если не сложно, на пальцах в чем ошибка?
C++
1
2
char*my1[]={"first my1","second my1"};
my1[0][0]='E';
Синтаксически все корректно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2010, 21:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с массивом char (C++):

Работа с массивом char - C++
Вот задание Вам дана непустая строка, состоящая из строчных латинских букв, цифр и пробелов. Длина строки не превышает 250 символов....

Работа с массивом char - C++
Товарищи подскажите пожалуйста, не могу никак понять в чём проблема. Есть массив скажем: int X; X = 1; X = 2; X = 3; X = 4; ...

Работа с массивом символов Char - C++
Народ помогите! 2. Дано целое число N и текстовый файл. Создать строковый файл, содержащий все слова длины N из исходного файла (знаки...

Задание с массивом типа char - C++
Нужно удалить все столбцы в которых есть хотя бы одна буква 'а'.Ошибка в delA,но не знаю как исправить #include <cstdlib> #include...

проблема с массивом типа CHAR - C++
нужно выполнить функцию fopen() . которая кушает на вход указатель на массив char в качестве пути к файлу ну и режим работы с файлом. ...

Проблема с классом и массивом char-ов - C++
Есть класс, содержащий одномерный массив из char-ов и методы для работы с ним. Проблема возникла в самом начале - не получается корректно...

32
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
08.07.2010, 22:08 #2
1)константную строку нельзя изменять
2)доступ осуществляется как к двумерному массиву
0
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
08.07.2010, 22:20  [ТС] #3
Цитата Сообщение от PointsEqual Посмотреть сообщение
1)константную строку нельзя изменять
А разве так константная строка не меняется?
C++
1
2
char t1[][10]={"first m1","second m1"};
t1[0][0]='E';
Цитата Сообщение от PointsEqual Посмотреть сообщение
2)доступ осуществляется как к двумерному массиву
Объясните, пожалуйста, что вы имеете ввиду?
0
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
08.07.2010, 22:32 #4
C++
1
2
 char*my1[]={"first my1","second my1"};
    my1[0]="E";
Добавлено через 1 минуту
массив был одномерный у вас, а обращались к нему как к матрице
C++
1
my1[0][0]
Добавлено через 9 минут
st_dent, извиняюсь, это массив а не строка у вас, но все равно, доступ осуществлялся как к матрице,
и вместо ='E' надо ="E"
1
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
08.07.2010, 22:34  [ТС] #5
Цитата Сообщение от PointsEqual Посмотреть сообщение
C++
1
2
 char*my1[]={"first my1","second my1"};
    my1[0]="E";
В этом примере первая строка становится "E" вместо исходной "first my1".
А как заменить первую букву исходной строки?
0
Mur3ik
102 / 102 / 4
Регистрация: 12.05.2010
Сообщений: 232
08.07.2010, 22:47 #6
st_dent,
my1[0]="E";// в двойных кавычках считается строкой, т.е. после Е идет 0-символ...
my1[0]='E';//одиночный символ
0
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
08.07.2010, 22:52 #7
Цитата Сообщение от st_dent Посмотреть сообщение
А как заменить первую букву исходной строки?
на с++ так например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
 
int main()
{
    std::string mas[]={"first my1","second my1"};
    std::string word=mas[0];
    word[0]='E';
    mas[0]=word;
    std::cout<<mas[0];
 
    return EXIT_SUCCESS;
}
0
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
08.07.2010, 22:55  [ТС] #8
Цитата Сообщение от Mur3ik Посмотреть сообщение
st_dent,
my1[0]="E";// в двойных кавычках считается строкой, т.е. после Е идет 0-символ...
my1[0]='E';//одиночный символ
Mur3ik,
Так-
C++
1
2
char*my1[]={"first my1","second my1"};
    my1[0]='E';
-не удается заменить первую букву исходной строки.
Выдает ошибку:
Ошибка 1 error C2440: =: невозможно преобразовать 'char' в 'char *'
0
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
08.07.2010, 23:03 #9
st_dent, вы путаете, my1[0] - это ячейка массива, в ней лежит строка , вы меняете саму строку а не символ в ней

Добавлено через 2 минуты
попробуйте так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
 
int main()
{
   char*my1[]={"first my1","second my1"};
    char *p = new char[strlen("first my1")+1];
    strcpy(p,"first my1");
    p[0] = 'E';
    my1[0]=p;
    std::cout<<my1[0];
    return EXIT_SUCCESS;
}
1
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
08.07.2010, 23:04  [ТС] #10
Цитата Сообщение от PointsEqual Посмотреть сообщение
на с++ так например
Спасибо, но хочется разобраться с массивом указателей:
C++
1
char*my1[]={"first my1","second my1"};
Здесь можно поменять 1 букву в первой строке?
0
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
08.07.2010, 23:04 #11
Цитата Сообщение от st_dent Посмотреть сообщение
Здесь можно поменять 1 букву в первой строке?
пример выше
0
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
08.07.2010, 23:08  [ТС] #12
PointsEqual, Спасибо.
Возвращаясь к первому посту.
В чем там ошибка, а то я понять не могу.
0
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
08.07.2010, 23:11 #13
у вас массив одномерный,
C++
1
2
char*my1[]={"first my1","second my1"};
а вы обращаетесь как к двумерному
C++
1
my1[0][0]='E';
да еще в добавок заменяете не букву в слове а само слово

сначало надо выделить слово из массива, а потом в нем заменять букву
1
Demihalf
Унылый школьник
126 / 60 / 3
Регистрация: 06.11.2009
Сообщений: 354
08.07.2010, 23:25 #14
PointsEqual, здесь проблема не в этом, вы не правы. В коде топикстартера все действительно синтаксически верно, там одинарные кавычки, как и должно быть. К указателю, кстати говоря, вполне корректно обращаться, как к массиву, поскольку имя массива без квадратных скобок по сути и есть указатель на первый элемент массива

Здесь имеется массив указателей на char. Так как в массиве хранятся указатели на строковые константы, возникнет Access violation в Винде или Segmentation fault в Юникс-подобных системах.
http://ru.wikipedia.org/wiki/%D0%9E%...86%D0%B8%D0%B8

Первый же пример:
C
1
2
char *s = "hello world";
*s = 'H';
Замечаете схожесть?
0
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
08.07.2010, 23:27  [ТС] #15
PointsEqual,
у вас массив одномерный,
а вы обращаетесь как к двумерному
Почему одномерный?
Разве это не массив 2х2:
----------------------------------------------
указатель |куда смотрит указатель
-------------|--------------------------------
указатель№1|смотрит на начало первой строки
указатель№2|смотрит на начало второй строки
0
08.07.2010, 23:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2010, 23:27
Привет! Вот еще темы с ответами:

Работа со строками - Invalid conversion from 'char' to 'const char*' - C++
#include &lt;iostream&gt; #include &lt;ctype.h&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; using namespace std; void poisk(int n, char...

Проверка массива char на равенство с таким же массивом - C++
#include &lt;iostream&gt; using namespace std; int main() { char chArr={&quot;4 8&quot;}; char chCode={&quot;4 8&quot;}; if (chCode==chArr)...

Помощь с массивом char breed[4] = {'Dog ','Cat ', 'Rat ', 'Mouse '} - C++
У меня вот тут проблемка, и я просто хочу понять как оно работает... Я так более менее понимаю работу ссылки (*) и то, что по идее само имя...

Объяснить разницу между массивом типа char и строкой в стиле Си (нюансы использования нуль-терминатора) - C++
Господа, появился такой вопрос: какое место занимает \0 в массиве charов? В данном коде пытался выйти из цикла по достижении...


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

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

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