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

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

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

Задание: Отсортировать слова в строке в лексикографическом порядке(по алфавиту).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2011, 15:09     Ввести с клавиатуры строку символов и обработать ее
Посмотрите здесь:

C++ Ввести с клавиатуры строку символов,удалить все гласные буквы из строки
Ввести с клавиатуры строку. Выдать на экран все слова из этой строки ... C++
C++ ввести строку символов. Сформировать строку вдвое большей длины, где каждый символ предворяется пробелом. Вывести полученную строку.
C++ Ввести строку длинной 500 символов
C++ Написать программу, которая вводит с клавиатуры строку не более 100 символов, еще одну строку не более 50 символов и выводит на экран позиции вхождени
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор 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;
}
semak92
Заблокирован
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!
-=ЮрА=-
Заблокирован
Автор FAQ
14.11.2011, 16:18     Ввести с клавиатуры строку символов и обработать ее #4
semak92, я не в тот топик код вставил, сейчас займусь Вашим, прошу прощения + писать в Си как я понял???Жду ответа и сразу приступаю!
semak92
Заблокирован
14.11.2011, 16:25  [ТС]     Ввести с клавиатуры строку символов и обработать ее #5
-=ЮрА=- писать на C++! но используя CharToOem . но я мало ещё в строках понимаю,помогите!
-=ЮрА=-
Заблокирован
Автор 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;
}
Миниатюры
Ввести с клавиатуры строку символов и обработать ее  
semak92
Заблокирован
14.11.2011, 17:42  [ТС]     Ввести с клавиатуры строку символов и обработать ее #7
-=Юра=- А на С++ попробуешь написать эту прогу??
а при выводе на экран она чтото не сортирует вроде по алфавиту??
Спасибо заранее!
-=ЮрА=-
Заблокирован
Автор 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 читай Си).
Также смотри сюда
http://www.cyberforum.ru/cpp-beginne...ml#post2088028
В символьной строке удалить все слова, состоящие из нечетного количества букв.
(совсем просто ниже)
Найти самое короткое из слов в предложении
semak92
Заблокирован
14.11.2011, 18:02  [ТС]     Ввести с клавиатуры строку символов и обработать ее #9
блин ничего я уже в этой хрени не понимаю! не мог бы ты собрать всё в одну прогу??!
-=ЮрА=-
Заблокирован
Автор FAQ
14.11.2011, 18:23     Ввести с клавиатуры строку символов и обработать ее #10
semak92, вводить какие строки будем кирилицей или латиницей?
В них знаки препинания будут или просто слова через пробел?

Не по теме:

PS:

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

semak92
Заблокирован
14.11.2011, 18:36  [ТС]     Ввести с клавиатуры строку символов и обработать ее #11
ну лучше наверно русский алфавит взять! поможите ещё в чем?
-=ЮрА=-
Заблокирован
Автор 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;
}
Миниатюры
Ввести с клавиатуры строку символов и обработать ее  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2011, 21:51     Ввести с клавиатуры строку символов и обработать ее
Еще ссылки по теме:

C++ Ввести с клавиатуры строку символов. Перевернуть каждое четное слово в строке.
C++ Одну строку инициализировать в программе, другую - ввести с клавиатуры; соединить их содержимое
Ввести строку символов. Найти количество неповторяющихся символов C++

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
15.11.2011, 21:51     Ввести с клавиатуры строку символов и обработать ее
  #13

Не по теме:

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

Yandex
Объявления
15.11.2011, 21:51     Ввести с клавиатуры строку символов и обработать ее
Ответ Создать тему
Опции темы

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