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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 51, средняя оценка - 4.69
semak92
Заблокирован
#1

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

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

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

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

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

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

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

Ввести строку символов. Найти количество неповторяющихся символов - C++
Ввести строку символов. Найти количество неповторяющихся символов. Вот мой текст программы (рабочий): #include &lt;iostream.h&gt; ...

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

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

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

Не по теме:

PS:

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

0
semak92
Заблокирован
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2011, 21:51
Привет! Вот еще темы с ответами:

Ввести с клавиатуры строку. Выдать на экран все слова из этой строки ... - C++
Помогите сделать 2 задачи на С 1 Ввести с клавиатуры строку. Выдать на экран все слова из этой строки, длина которых отличается...

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

Ввод с клавиатуры строку символов - C++
Здраствуйте. Пользователь вводит с клавиатуры строку символов. Найти в строке все маленькие англ. букви и перевести их в верхний...

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


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

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

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