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

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

Войти
Регистрация
Восстановить пароль
 
 
Mind_Hunter
2 / 0 / 1
Регистрация: 25.12.2011
Сообщений: 120
#1

Чтение символов из строки - C++

30.04.2013, 19:26. Просмотров 1157. Ответов 23
Метки нет (Все метки)

Мне нужно из строковой переменной считать символы. То есть, например, имеем строку 56->57. Нужно считать символы до ' - ', в другую переменную того же типа. Как сие сделать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2013, 19:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение символов из строки (C++):

Получить из строк новую строку, содержащюю первые N1 символов строки S1 и последнии N2 символов строки S2 - C++
помогите написать программу на двух разных классах! 2) Даны целые положительные числа N1 и N2 и строки S1 и S2. Получить из этих строк...

Ошибка ввода символов строки, при количестве символов кратных 8 - C++
Здравствуйте, уважаемые форумчане! Разбираясь с механизмом ввода и динамическим выделением памяти для строк решил написать такой...

Каждое слово строки состоящее более, чем из 8 символов, сократить до первых 8 символов - C++
Нуждаюсь в помощи. Нужно написать программу на C++(в принципе, и на Си можно) которая делает следующее: В каждой строке каждое слово,...

Удалить конец строки символов. Ввести кол-во удаляемых символов , вывести результат ,String ,задачка,С++ - C++
Удалить конец строки символов. Ввести количество удаляемых символов , вывести результат на печать . Помогите плиз с задачкой. тема :...

Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки. - C++
Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки. Ввод В первой строке файла...

Чтение через fscanf_s части строки с пробелом (и запись этой же строки) - C++
нужно записать в файл строку, содержащую через табуляцию int, char, char, char, float, int. Далее необходимо из такой же строки вывести...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 19:33 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    string str, temp;
    cin>>str;
    int i=0;
    while (str[i]!='-' && i<str.length())
    {
        temp+=str[i];
        ++i;
    }
    cout<<temp<<endl;
    system("pause");
}
1
Mind_Hunter
2 / 0 / 1
Регистрация: 25.12.2011
Сообщений: 120
30.04.2013, 20:15  [ТС] #3
Спасибо, все работает!

Добавлено через 35 минут
Только есть ещё один вопрос, как сделать, чтобы если в строке нашел те же символы, что в temp, можно было их в строке заменить на символы из третьей переменной?
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 20:17 #4
Mind_Hunter, здесь есть код, подобный тому, который Вам нужен. Почитайте, если не разберетесь-спрашивайте
0
Mind_Hunter
2 / 0 / 1
Регистрация: 25.12.2011
Сообщений: 120
30.04.2013, 20:34  [ТС] #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
27
28
29
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
 
 
 
int main()
{
    string mystr;
    char find;
    string insert;
    cin>>mystr;
    cin>>find;
    cin>>insert;
    size_t count=0;
    while (count!=-1) //ВОТ ЭТО УСЛОВИЕ
    {
        count=mystr.find(find,count);
        if (count!=-1)
        {
            mystr.erase(count,1);
            mystr.insert(count, insert);
            count+=insert.length();
        }
    }
    cout<<mystr<<endl;
    system("pause");
    return 0;
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 20:37 #6
Цитата Сообщение от Mind_Hunter Посмотреть сообщение
Зачем он тут устанавливает условие
Затем,чтобы сделать все замены в строке. Функция поиска возвращает -1, если нету вхождений подстроки в строку, то есть, пока есть вхождения-искать, если нету вхождений, выйти из цикла.
0
Mind_Hunter
2 / 0 / 1
Регистрация: 25.12.2011
Сообщений: 120
30.04.2013, 20:42  [ТС] #7
Цитата Сообщение от Mind_Hunter Посмотреть сообщение
mystr.erase(count,1);
Здесь число в скобках, это количество символов?
На функции find и erase пишет - [C++ Error] Unit1.cpp(70): E2316 'find' is not a member of 'AnsiString'
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 20:54 #8
Цитата Сообщение от Mind_Hunter Посмотреть сообщение
Здесь число в скобках, это количество символов?
Там два числа. count-это позиция первого символа, который надо удалить. 1-это количество символов, которые над удалить.
Вообще, это очень примитивный метод. Если хотите как-то лучше написать, то почитайте вот это

Добавлено через 9 минут
Mind_Hunter, а Вы используете AnsiString? для них надо смотреть свои функции
0
Mind_Hunter
2 / 0 / 1
Регистрация: 25.12.2011
Сообщений: 120
30.04.2013, 20:56  [ТС] #9
ни одной переменной AnsiString не использую, библиотека string подключена. Переменные string
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 21:12 #10
Mind_Hunter, полный код в студию. И какая у Вас среда?
0
Mind_Hunter
2 / 0 / 1
Регистрация: 25.12.2011
Сообщений: 120
30.04.2013, 21:14  [ТС] #11
Borland C++ Bulider 6.
Код -
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <string.h>
#include <iostream.h>
#include <windows.h>
#pragma hdrstop
 
#include "Unit1.h"
using namespace std;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
String *beginmas=new String[100];
String *finalmas=new String[100];
String slovo;
String Rule;
String temp,changer;
size_t level;
int i,j,len,counter=0; // AnsiString Arrow;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::BeginEditChange(TObject *Sender)
{//ГІГіГІ ГўГЎГЁГўГ*ГҐГ¬ ñëîâî äëÿ ïðîâåäåГ*ГЁГҐ äåéñòâèé
slovo=BeginEdit->Text;
}
//---------------------------------------------------------------------------
 
 
 
//---------------------------------------------------------------------------
void __fastcall TForm1::RulesEditKeyPress(TObject *Sender, char &Key)
 
{
//ГўГЎГЁГўГ*ГҐГ¬ Гў ëèñòáîêñ ГЇГ°Г*ГўГЁГ«Г* ïîäñòГ*Г*îâîê
if (GetAsyncKeyState(VK_RETURN))
{len=RulesEdit->Text.Length();
 RulesListBox->Items->Add(RulesEdit->Text);
 counter=counter++;
 RulesEdit->Text="";
}
}
 
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for (i=0;i==counter;i++)
{temp=RulesListBox->Items->Strings[RulesListBox->ItemIndex];
 while (temp[i]!='-')
    {
        beginmas[i]+=temp;
        ++i;
        finalmas[i]=temp[5];
        finalmas[i]+=temp[6];
    }
 
}
for (j=0;j==counter;j++)
{
 for (i=0;i<=slovo.Length();i++)
 {changer=slovo[i];
  changer+=slovo[i+1];
  if (changer.AnsiCompareIC(beginmas[j])>0)
  {changer=beginmas[j];
  }
 }
}
FinalEdit->Text=slovo;
}
//---------------------------------------------------------------------------
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 22:41 #12
Mind_Hunter, где Вы тут используете find и erase?

Добавлено через 17 секунд

Не по теме:

простите за длительное отсутствие

0
Mind_Hunter
2 / 0 / 1
Регистрация: 25.12.2011
Сообщений: 120
30.04.2013, 23:05  [ТС] #13
Глупость произошла - свет вырубили, а я не сохранил. Теперь по-другому пойти решил. Нашел функцию с подстроками, так вроде проще, да только не срабатывает. Вот код:
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
67
68
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <string.h>
#include <iostream.h>
#include <windows.h>
#pragma hdrstop
 
#include "Unit1.h"
using namespace std;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString beginmas[100];
AnsiString finalmas[100];
AnsiString slovo;
AnsiString Rule;
AnsiString temp,changer;
size_t level=0;
int i,j,len;
int counter=0;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::BeginEditChange(TObject *Sender)
{//ГІГіГІ ГўГЎГЁГўГ*ГҐГ¬ ñëîâî äëÿ ïðîâåäåГ*ГЁГҐ äåéñòâèé
slovo=BeginEdit->Text;
}
//---------------------------------------------------------------------------
 
 
 
//---------------------------------------------------------------------------
void __fastcall TForm1::RulesEditKeyPress(TObject *Sender, char &Key)
 
{
//ГўГЎГЁГўГ*ГҐГ¬ Гў ëèñòáîêñ ГЇГ°Г*ГўГЁГ«Г* ïîäñòГ*Г*îâîê
 
 if (GetAsyncKeyState(VK_RETURN))
  {len=RulesEdit->Text.Length();
   RulesListBox->Items->Add(RulesEdit->Text);
   counter=counter++;
   RulesEdit->Text="";
  }
}
 
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{for (i=0;i==counter;i++)
 {temp=RulesListBox->Items->Strings[i];
  beginmas[i]=temp.SubString(1,2);//ВОТ ЗДЕСЬ ВИДИМО
  finalmas[i]=temp.SubString(5,2);
  FinalEdit->Text=beginmas[i];
  }
 slovo=StringReplace(slovo,beginmas[i],finalmas[i],TReplaceFlags() << rfReplaceAll);
 FinalEdit->Text=slovo;
}
//---------------------------------------------------------------------------
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 23:15 #14
Mind_Hunter, ага. Теперь вижу AnsiString. И что у Вас не срабатывает?
0
Mind_Hunter
2 / 0 / 1
Регистрация: 25.12.2011
Сообщений: 120
30.04.2013, 23:18  [ТС] #15
Я строки из листбокса беру поочередно, разбиваю на две подстроки и их присваиваю в массивы beginmas и finalmas, а потом ищу совпадение в строке slovo. Если с beginmas есть совпадение, то эти символы в slovo меняются на символы элемента finalmas с тем же индексом, что и beginmas. а он по всей видимости не присваивает подстроки в эти массивы, ибо на выходе получаю то же слово, которое ввел в начале
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2013, 23:18
Привет! Вот еще темы с ответами:

Чтение символов из файла - C++
Дан текст; определить, содержит ли он символы, отличные от букв и пробела

Чтение символов с консоли - C++
Как записать в строку уже выведенные на консоль символы, в том числе пробелы? scanf ждет, что я их введу с клавиатуры Среда - Борланд...

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

Чтение из файлов. Отсеивание символов - C++
Добрый день. Необходимо реализовать программу, которая открывает файл и считывает числовые значения. К примеру, в файле написано: Mass =...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.04.2013, 23:18
Ответ Создать тему
Опции темы

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