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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.83
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
#1

Символьные массивы - C++

06.11.2012, 19:23. Просмотров 4870. Ответов 6
Метки нет (Все метки)

Ребята, я по некоторих причинах пропустил пару по етой теме, и не знаю толком как работать с символьними масивами. Нужно сделать задание для лабараторки: ввести стоку и инвертировать ее(первое слово в конец, второе конец-1...). -Как ето сделать, как вводитсья строка в массив, каждое слово отдельно или считает каждый символ отдельно? Как ето сделать с помощю самых прымытывних команд(типа scanf или gets...) и циклов?

Добавлено через 34 минуты
ну так что, никто не поможет мне разобраться с символьними строками?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2012, 19:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Символьные массивы (C++):

Символьные массивы - C++
Написать и отладить программу для ввода предложения, содержащего несколько круглых скобок. Если число открывающихся скобок равно числу...

Символьные массивы - C++
Ввести свою Фамилию, имя и Отчество, как одно текстовое поле. Определить длину и количество букв "а" в нем. Решить задачу одним из...

Двумерные массивы (+символьные) - C++
Вот 5 задач... необходимо помочь братишке... сам я в С++ не особо силен... Сильно прошу вас помочь мне... За оказанную услугу готов...

Символьные массивы и их друзья - C++
Доброе время суток. Сразу хочу оговориться, что задача, условие которой я напишу далее, не связана с заданием в институте - я делаю это...

Строковые переменные (символьные массивы) - C++
Создать две строковые переменные (символьные массивы), содержащие ваше имя и фамилию. Выполнить с ними с помощью строковых функций...

Символьные массивы (исправить код) - C++
Как удалить комы до первой точки? Я написал код, но от некорректно работает! Мне нужно сдвинуть массив на столько сколько удаляется ком! Но...

6
MrGrig
177 / 160 / 2
Регистрация: 08.10.2012
Сообщений: 422
06.11.2012, 19:24 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
printf("Введите cтрокy");
string strmas[100];
int j=-1;
char str[1000]
gets(str);
for(int i=0;str[i]!='\n';i++)
    if(str[i]!=' '){
        j++;
        while((str[i]!=' ')&&(str[i]!='\n'))
             strmas[j]+=str[i++];
        i--;
    }
int i1=0;
for(int i=j;i>0;i--){
    j=0;
    while(j!=strmas[i].size())
        str[i1++]=str[i][j++];
    }
str[i1]='\n';
printf("\n%s",str);
не уверен что самый простой или кошерный способ, но мне видится именно так
З.Ы. в си# сделать намного проще=)
1
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
06.11.2012, 19:29  [ТС] #3
MrGrig, мне не код надо, а больше "теории" так сказать, мне больше интересно как ето все работает, но за код всеравно спасибо.
0
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
06.11.2012, 19:37 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main(void)
{
    char mas[20]; //статический символьный массив из 19 элементов (последний всегда '/0')
    char undef_mas[]={"привет мир"}; //неявно заданный размер
    char *dynamic_mas=new char[20]; //динамический массив (последний символ '/0')
 
    //ввод строки
 
    cin>>mas; //вводит символы в массив до пробела или до ентер
 
    cin.ignore(1,'\n'); //иногда требуется игнорировать застрявщий в памяти перевод строки перед использованием getline
    cin.getline(&mas[0], 20); //вводит строку с пробелами
 
         cin.getline(&mas[0], 20, 'b') //ввод 20 символов или пока не будет введен символ-разделитель, в данном случае это b
 
    cout<<mas;  // вывод массива через поток вывода
    printf("\n%s",mas); // вывод через функцию
 
 
}
0
MrGrig
177 / 160 / 2
Регистрация: 08.10.2012
Сообщений: 422
06.11.2012, 19:55 #5
исправленный рабочий код
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
printf("Введите cтрокy\n");
string strmas[100];//это массив в который будут записываться наши слова
int j=-1;//счетчик слов в строке
char str[1000];//наша вводима строка
gets(str);//ну тут понятно строку вводите
for(int i=0;str[i]!='\0';i++)//Цикл работает по принципу если не пробел вводим слово с ячейку 
//массива строк string это тот же "перепрошитый" char, но работает несколько иначе
    if(str[i]!=' '){//встретили пробел начинаем записывать в масив
        j++;//наращиваем счетчик
        while((str[i]!=' ')&&(str[i]!='\0'))//тут так сказать защита от дурака, если между словами более
//1го пробела или пробел стоит в конце строки, т.е. если у нас такая ситуация лишние пробелы пропускаются
             strmas[j]+=str[i++];//присваивается jй ячейке масива строк iй символ нашей строки
//т.е. записываем слово пока не наступит очередной пробел
        i--;//возврат на предыдущее значение (чтобы цикл прошел по всем символам ибо если не
//сделать то при считывании строки типа "ололо ололо" после считывания 1го слова указатель перейдет на символ 'o' а не на пробел, конечно в данном случае и без этого работать будет, но лучше с ним
    }
int i1=0;//тут идет обратный процесс вставки
for(int i=j;i>=0;i--){//начиная с последнего элемента и двигаясь к первому вставляем в нашу строку 
//слова, т.е. меняем местами
    j=0;//счетчик символов в ячейке массива строк
    while(j!=strmas[i].size())//пока счетчик не достиг конца
        str[i1++]=strmas[i][j++];//присваиваем в нашу строку слово из массива
    str[i1++]=' ';//добавляем пробел
}
str[i1]='\0';//помечаем конец строки (ибо длина у нас может измениться если будет введено несколько пробелов между словами или в конце/начале строки
printf("\n%s",str);//выводим строку=)
Добавлено через 4 минуты
Tiva,
Цитата Сообщение от ozzy_b Посмотреть сообщение
Как ето сделать с помощю самых прымытывних команд(типа scanf или gets...) и циклов?
cin cout Это уже ООП
да и если честно не совсем понимаю что делает ваша функция
0
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
06.11.2012, 20:01 #6
Цитата Сообщение от MrGrig Посмотреть сообщение
Tiva,

cin cout Это уже ООП
меня как в институте на 1ом курсе научили пользоваться потоками ввода\вывода\файловыми и тд
так я и привык к синтаксису цин\цяут

теперь когда вижу
C++
1
printf("%0*.*f%n\n", w, p, number, &kk);
меня бросает в мандраж, надо следить за типами, помнить все обозначения типов, модификаторы и тп

в этом плане cout проще и для меня читабельнее


и да, использование потоков это еще не ооп
0
MrGrig
177 / 160 / 2
Регистрация: 08.10.2012
Сообщений: 422
06.11.2012, 21:06 #7
принтфы и сканфы и подобная фигня из библеотеки stdio.h это дедушки пришедшие из Си в Си++
да потоки это не суть ооп конечно но все таки это функционал ооп так сказать
0
06.11.2012, 21:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2012, 21:06
Привет! Вот еще темы с ответами:

Символьные массивы. Сравнение с алфавитом - C++
вечер добрый. задача такая: имеется символьный массив алфавитный(32 кириллица) и символьный массив (размер около 5-10) который...

Сравнение строк (символьные массивы), игнорируя регистровые различия - C++
Я недавно начал изучать С++ и все не как не пойму что не так с моей программой... Задача: Напишите программу, которая предлагает...

символьные матрицы в C++ - C++
Заменить символом '*' все элементы, расположенные выше побочной диагонали и не являющиеся цифрами.

Символьные строки - C++
Я, конечно, туп, но как взять половину первой строки при соединение строк? (задание: Ввести с клавиатуры строку. Определить во введенных...


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

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

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