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

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

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

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

Задание: Отсортировать слова в строке в лексикографическом порядке(по алфавиту).
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2011, 15:09
Ответы с готовыми решениями:

Ввести с клавиатуры строку символов,удалить все гласные буквы из строки
Помогите со строками... Ввести с клавиатуры строку символов,удалить все гласные буквы из строки....

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

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

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

12
Заблокирован
Автор FAQ
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
14.11.2011, 16:18 4
semak92, я не в тот топик код вставил, сейчас займусь Вашим, прошу прощения + писать в Си как я понял???Жду ответа и сразу приступаю!
0
Заблокирован
14.11.2011, 16:25  [ТС] 5
-=ЮрА=- писать на C++! но используя CharToOem . но я мало ещё в строках понимаю,помогите!
0
Заблокирован
Автор FAQ
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
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
14.11.2011, 18:23 10
semak92, вводить какие строки будем кирилицей или латиницей?
В них знаки препинания будут или просто слова через пробел?

Не по теме:

PS:

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

0
Заблокирован
14.11.2011, 18:36  [ТС] 11
ну лучше наверно русский алфавит взять! поможите ещё в чем?
0
Заблокирован
Автор FAQ
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
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru