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

Ввести с клавиатуры строку символов и обработать ее

14.11.2011, 15:09. Показов 16594. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! помогите пожалуйста со строками в С++!
Ввести с клавиатуры строку символов и обработать ее в соответствии со своим вариантом, используя функции:
1.Формирование,печать и обработку массивов и строк оформить в виде функции. Массивы передавать как параметры функций.
2.Ввод/вывод строк организовать с помощью функций:
char* gets(char*s)
int puts(char*s)
3.Для обработки строк использовать стандартные функции из библиотечного файла <cstring>
4.Функции main() должна содержать только описание массивов/строк и вызовы функций для формирования,печати и обработки массивов/строк.

Задание: Отсортировать слова в строке в лексикографическом порядке(по алфавиту).
1
14.11.2011, 15:09
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.11.2011, 15:09
Ответы с готовыми решениями:

Ввести с клавиатуры строку символов,удалить все гласные буквы из строки
Помогите со строками... Ввести с клавиатуры строку символов,удалить все гласные буквы из строки. На примере этого: #include...

Ввести с клавиатуры строку символов. Перевернуть каждое четное слово в строке.
Есть задание. Ввести с клавиатуры строку символов. После чего Перевернуть каждое четное слово в строке. Могу задать строку вручную как и...

Ввести с клавиатуры строку символов. Составить программу для замены в данной строке всех пробелов на символ $
Ввести с клавиатуры строку символов. Составить программу для замены в данной строке всех пробелов на символ $.

12
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
14.11.2011, 16:01 2
Цитата Сообщение от semak92 Посмотреть сообщение
Отсортировать слова в строке в лексикографическом порядке(по алфавиту)
- по алфавиту первых букв в словах или как это понимать???Допустимо ли использования std::string а также отличных от
Цитата Сообщение от semak92 Посмотреть сообщение
char* gets(char*s)
int puts(char*s)
операторов ввода/вывода???

Добавлено через 6 минут
Вот код без CharToOem
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
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
 
//Ðóññèôèêàöèÿ
ostream& operator<<(ostream &stream,char* s)
{
    for(char* ps=s; *ps; ps++)
    {
        if(*ps=='¸')
            stream<<char(241);
        else 
        if(*ps=='¨')
            stream<<char(240);
        else 
        if(*ps>=-64 && *ps<=-17)                   
            stream<<char(*ps+64+128);
        else 
        if(*ps<0)
            stream<<char(*ps+64+176);
        else
            stream<<*ps;
    }
    return stream;
}
 
void convert (char str[])
{
    char qwe[] = "";
    char c = '³';
    int result;
    cout<<"String: "<<str<<endl;
    cout<<"Search char: "<<c<<endl;
    char *p = strchr( str, c );
    result = (int)(p - str + 1);
    if ( p != NULL ) 
        cout<<"Pos: "<<result<<endl;
   else 
       cout<<"Not found"<<endl;
   *strchr(str, c ) = 'i';
   cout<<"New: "<<p<<endl;
}
 
int main() {
        char str[] = "Ô³çèêà";
        convert(str);
        system("pause");
        return 0;
}
1
Заблокирован
14.11.2011, 16:06  [ТС] 3
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- по алфавиту первых букв в словах или как это понимать???Допустимо ли использования std::string а также отличных от операторов ввода/вывода???

Добавлено через 6 минут
Вот код без CharToOem
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
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
 
//Ðóññèôèêàöèÿ
ostream& operator<<(ostream &stream,char* s)
{
    for(char* ps=s; *ps; ps++)
    {
        if(*ps=='¸')
            stream<<char(241);
        else 
        if(*ps=='¨')
            stream<<char(240);
        else 
        if(*ps>=-64 && *ps<=-17)                   
            stream<<char(*ps+64+128);
        else 
        if(*ps<0)
            stream<<char(*ps+64+176);
        else
            stream<<*ps;
    }
    return stream;
}
 
void convert (char str[])
{
    char qwe[] = "";
    char c = '³';
    int result;
    cout<<"String: "<<str<<endl;
    cout<<"Search char: "<<c<<endl;
    char *p = strchr( str, c );
    result = (int)(p - str + 1);
    if ( p != NULL ) 
        cout<<"Pos: "<<result<<endl;
   else 
       cout<<"Not found"<<endl;
   *strchr(str, c ) = 'i';
   cout<<"New: "<<p<<endl;
}
 
int main() {
        char str[] = "Ô³çèêà";
        convert(str);
        system("pause");
        return 0;
}
-=ЮрА=-, а можно как бы на более понятном языке! с более привычными операторами, и используйте CharToOemA!
0
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
14.11.2011, 16:18 4
semak92, я не в тот топик код вставил, сейчас займусь Вашим, прошу прощения + писать в Си как я понял???Жду ответа и сразу приступаю!
0
Заблокирован
14.11.2011, 16:25  [ТС] 5
-=ЮрА=- писать на C++! но используя CharToOem . но я мало ещё в строках понимаю,помогите!
0
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
14.11.2011, 17:20 6
Цитата Сообщение от semak92 Посмотреть сообщение
но используя CharToOem . но я мало ещё в строках понимаю,помогите!
- пришлось повозиться с OemToChar и CharToOem, написал пока на Си
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
#include <windows.h>
#include <string.h>
#include <stdio.h>
 
void Rus(char * str)
{
    CharToOem(str,str);
    printf("%s\n",str);
}
 
int main() 
{
    char str[1024];//Â íåé áóäåò òåêñò
    char buf[1024];//Áóôôåð str
    char msg[] = "Ââåäèòå ñòðîêó (íà ðóññêîì!)";Rus(msg);
    scanf("%[^\n]",str);
    OemToChar(str,str);
    char delim[] = " ,.!?-;";//Ðàçäåëèòåëè ìåæäó ñëîâàìè
    sprintf(buf,"%s",str);//Êîïèðóåì str â buf
    char * tok = strtok(buf,delim);
    char ** words;
    long i = 0,j,k, nWords = 0;
    while(tok)
    {
        nWords++;//Ñ÷èòàåì ÷èñëî ñëîâ â ñòðîêå
        tok = strtok(NULL,delim); 
    }
    long * index = (long *)malloc(sizeof(long)*nWords);
    //Ïàìÿòü ïîä óêàçàòåëè íà ñëîâà
    words = (char **)malloc(sizeof(char *)*nWords);
    tok = strtok(str,delim);
    //Ñîçäà¸ì ìàññèâ ñëîâ
    while(tok)
    {
        //Ïàìÿòü ïîä ñëîâî
        words[i] = (char *)malloc(sizeof(char)*(strlen(tok) + 1));
        index[i] = i;
        sprintf(words[i],"%s",tok);
        i++;
        tok = strtok(NULL,delim); 
    }
    //ñîðòèðóåì íîìåðà âûâîäà ñëîâ â ñîîòâåòñòâèè ñ àëôàâèòîì
    //ñîðòèðîâêó - ïðÿìîé âûáîð
    for(i = 0    ; i < nWords; i++)
    for(j = i + 1; j < nWords; j++)
    {
        if((words[index[i]])[0] > (words[index[j]])[0])
        {
            k = index[j];
            index[j] = index[i];
            index[i] = k;
        }
    }
    //Âûâîäèì ñëîâà
    for(i = 0; i < nWords; i++)
        Rus(words[index[i]]);
    system("pause");
    return 0;
}
Миниатюры
Ввести с клавиатуры строку символов и обработать ее  
0
Заблокирован
14.11.2011, 17:42  [ТС] 7
-=Юра=- А на С++ попробуешь написать эту прогу??
а при выводе на экран она чтото не сортирует вроде по алфавиту??
Спасибо заранее!
0
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
14.11.2011, 17:57 8
Цитата Сообщение от semak92 Посмотреть сообщение
а при выводе на экран она чтото не сортирует вроде по алфавиту??
- я сам увидел - это грабли представления русских символов в char - они там не по порядку идут, вот и не очень отрабатывает условие
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if((words[index[i]])[0] > (words[index[j]])[0])
- предлагаю сделать в С++ с латиницей, а уж потом подработать по кириллицу + давай руссифицировать

Цитата Сообщение от semak92 Посмотреть сообщение
//Руссификация
ostream& operator<<(ostream &stream,char* s)
- так, ну CharToOem в общем то и не плюсы а (API читай Си).
Также смотри сюда
https://www.cyberforum.ru/cpp-... ost2088028
В символьной строке удалить все слова, состоящие из нечетного количества букв.
(совсем просто ниже)
Найти самое короткое из слов в предложении
0
Заблокирован
14.11.2011, 18:02  [ТС] 9
блин ничего я уже в этой хрени не понимаю! не мог бы ты собрать всё в одну прогу??!
0
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
14.11.2011, 18:23 10
semak92, вводить какие строки будем кирилицей или латиницей?
В них знаки препинания будут или просто слова через пробел?

Не по теме:

PS:

Цитата Сообщение от semak92 Посмотреть сообщение
лин ничего я уже в этой хрени не понимаю!
- не нужно так волноваться я тебе помочь хочу или моя помощь не требуется?Тогда другое дело..!

0
Заблокирован
14.11.2011, 18:36  [ТС] 11
ну лучше наверно русский алфавит взять! поможите ещё в чем?
0
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
15.11.2011, 21:49 12
Сделал без сторонних функций всё в циклах, программа руссифицирована, однако в силу сложности преобразования некоторых символов кириллицы алгоритм 100% отрабатывает для латиницы, под кириллический ввод надо подпаивать, пока пусть будет так
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>
using namespace std;
 
int main()
{
    system("chcp 1251");//Установка кодовой страницы
    char str[1024];
    cout<<"\tВведите текст для аналза\n";
    gets(str);
    long i,j,k,nWords;
    //Считаем число слов в тексте
    for(i = 0, nWords = 0; str[i] != '\0'; i++)
    { 
        if(isalpha(str[i]))
        {
            while(str[i] != '\0' && isalpha(str[i]))
                i++;
            nWords++;
        }
    }
    //Выделем память под указатели на строки со словами из текста
    char ** Words = new char * [nWords];
    //Выделяем память под массив индексов вывода строк из Words
    long * index = new long [nWords];
    for(i = 0, nWords = 0; str[i] != '\0'; i++)
    { 
        if(isalpha(str[i]))
        {
            j = i;
            //Считаем позицию окончания слова
            while(str[j] != '\0' && isalpha(str[j]))
                j++;
            //выделяем память под слово из текста
            Words[nWords] = new char[j - i + 1];
            //Пишем символы из слова текста в k-ую строку
            j = i;
            while(str[j] != '\0' && isalpha(str[j]))
            {
                Words[nWords][j - i] = str[j];
                j++;
            }
            Words[nWords][j - i] = '\0';//Завершаем строку
            index[nWords] = nWords;
            nWords++;
            i = j;
        }
    }
    cout<<"Числов слов в тексте : "<<nWords<<endl;
    //Сортируем индексы вывода в соответсвии с алфавитом
    for(i = 0; i < nWords; i++)
    for(j = i + 1; j < nWords; j++)
    {
        if(Words[index[j]] < Words[index[i]])
        {
            k = index[i];
            index[i] = index[j];
            index[j] = k;
        }
    }
    cout<<"\tСлова в алфавитном порядке\n";
    for(i = 0; i < nWords; i++)
        cout<<Words[index[i]]<<endl;
    system("pause");
    return 0;
}
Миниатюры
Ввести с клавиатуры строку символов и обработать ее  
0
-=ЮрА=-
15.11.2011, 21:51     Ввести с клавиатуры строку символов и обработать ее
  #13

Не по теме:

PS:Память вконце программы не чищу - алгоритм отрабатывает 1 раз и при его завершении память за ним приберёт сама ОС

0
15.11.2011, 21:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2011, 21:51
Помогаю со студенческими работами здесь

Написать программу, которая вводит с клавиатуры строку не более 100 символов, еще одну строку не более 50 символов и выводит на экран позиции вхождени
Задание: Написать программу, которая вводит с клавиатуры строку не более 100 символов, еще одну строку не более 50 символов и выводит на...

Ввести строку символов. Найти количество неповторяющихся символов
Ввести строку символов. Найти количество неповторяющихся символов. Вот мой текст программы (рабочий): #include...

Обработать денежную строку как массив символов
Задача:Одним из недостатков C++ является отсутствие для бизнес-программ встроенного типа для денежных значений, такого, как $173 698...

Как ввести с клавиатуры строку
Добрый день. У меня есть строка в которой 6000 тысяч символов, конец строки '\r\n'. Как записать все 6 тысяч символов в string...

Ввести строку длинной 500 символов
Ввести строку длинной до 500 символов.Найти и вывести все слова содержащие заданную последовательность символов.Алфавит русский, английские...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Использование кэша Laravel - полный гайд
bytestream 18.02.2025
Кэширование - один из наиболее эффективных способов повышения производительности веб-приложений. В современном мире, где скорость загрузки страниц напрямую влияет на удержание пользователей и. . .
Создаем REST API в Laravel с аутентификацией через Passport
bytestream 18.02.2025
Разработка современных веб-приложений все чаще требует создания надежного и хорошо структурированного API. REST API стал стандартом де-факто для построения взаимодействия между клиентской и серверной. . .
Пайплайны в Laravel - полный гайд
bytestream 18.02.2025
Разработка современных веб-приложений часто требует обработки сложных процессов, состоящих из множества последовательных шагов. Например, при создании системы комментариев может потребоваться. . .
Как правильно использовать @required в Symfony
bytestream 18.02.2025
При разработке приложений на Symfony мы часто сталкиваемся с необходимостью внедрения зависимостей. Фреймворк предоставляет несколько способов управления этим процессом, и одним из таких инструментов. . .
Система безопасности в Laravel: возможности и примеры
Wired 18.02.2025
Каждый день появляются новые виды атак и уязвимостей, которые могут поставить под угрозу конфиденциальные данные пользователей и функционирование всей системы. В этом контексте выбор надежного. . .
Давайте сравним Django и Laravel
Wired 18.02.2025
Django и Laravel - два мощных инструмента, которые часто сравнивают между собой. Оба фреймворка предлагают разработчикам богатый набор возможностей для создания масштабируемых веб-приложений, но. . .
Laravel или React - что лучше?
Wired 18.02.2025
В разработке веб выбор правильного инструмента часто определяет успех всего проекта. Особенно интересным представляется сравнение Laravel и React - двух популярных технологий, которые часто. . .
Laravel 11: новые возможности, гайд по обновлению
Wired 18.02.2025
Laravel 11 - это новая масштабная версия одного из самых популярных PHP-фреймворков, выпущенная в марте 2024 года. Эта версия продолжает традицию внедрения передовых технологий и методологий. . .
Миграции в Laravel
Wired 18.02.2025
Разработка веб-приложений на Laravel неразрывно связана с управлением структурой базы данных. При работе над проектом часто возникает необходимость вносить изменения в схему базы данных - добавлять. . .
Аутентификация в Laravel
Wired 18.02.2025
В современном мире веб-разработки безопасность пользовательских данных становится критически важным аспектом любого приложения. Laravel, как один из самых популярных PHP-фреймворков, предоставляет. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru