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

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

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

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

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

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

Добавлено через 34 минуты
ну так что, никто не поможет мне разобраться с символьними строками?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGrig
176 / 159 / 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);
не уверен что самый простой или кошерный способ, но мне видится именно так
З.Ы. в си# сделать намного проще=)
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
06.11.2012, 19:29  [ТС]     Символьные массивы #3
MrGrig, мне не код надо, а больше "теории" так сказать, мне больше интересно как ето все работает, но за код всеравно спасибо.
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); // вывод через функцию
 
 
}
MrGrig
176 / 159 / 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 Это уже ООП
да и если честно не совсем понимаю что делает ваша функция
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 проще и для меня читабельнее


и да, использование потоков это еще не ооп
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2012, 21:06     Символьные массивы
Еще ссылки по теме:

C++ Символьные массивы (исправить код)
Сравнение строк (символьные массивы), игнорируя регистровые различия C++
C++ Символьные константы
C++ Символьные массивы
C++ Символьные массивы. Сравнение с алфавитом

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

Или воспользуйтесь поиском по форуму:
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
06.11.2012, 21:06     Символьные массивы #7
принтфы и сканфы и подобная фигня из библеотеки stdio.h это дедушки пришедшие из Си в Си++
да потоки это не суть ооп конечно но все таки это функционал ооп так сказать
Yandex
Объявления
06.11.2012, 21:06     Символьные массивы
Ответ Создать тему
Опции темы

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