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

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

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

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

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

Мне нужно из строковой переменной считать символы. То есть, например, имеем строку 56->57. Нужно считать символы до ' - ', в другую переменную того же типа. Как сие сделать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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");
}
Mind_Hunter
2 / 0 / 1
Регистрация: 25.12.2011
Сообщений: 120
30.04.2013, 20:15  [ТС]     Чтение символов из строки #3
Спасибо, все работает!

Добавлено через 35 минут
Только есть ещё один вопрос, как сделать, чтобы если в строке нашел те же символы, что в temp, можно было их в строке заменить на символы из третьей переменной?
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 20:17     Чтение символов из строки #4
Mind_Hunter, здесь есть код, подобный тому, который Вам нужен. Почитайте, если не разберетесь-спрашивайте
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;
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 20:37     Чтение символов из строки #6
Цитата Сообщение от Mind_Hunter Посмотреть сообщение
Зачем он тут устанавливает условие
Затем,чтобы сделать все замены в строке. Функция поиска возвращает -1, если нету вхождений подстроки в строку, то есть, пока есть вхождения-искать, если нету вхождений, выйти из цикла.
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'
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 20:54     Чтение символов из строки #8
Цитата Сообщение от Mind_Hunter Посмотреть сообщение
Здесь число в скобках, это количество символов?
Там два числа. count-это позиция первого символа, который надо удалить. 1-это количество символов, которые над удалить.
Вообще, это очень примитивный метод. Если хотите как-то лучше написать, то почитайте вот это

Добавлено через 9 минут
Mind_Hunter, а Вы используете AnsiString? для них надо смотреть свои функции
Mind_Hunter
2 / 0 / 1
Регистрация: 25.12.2011
Сообщений: 120
30.04.2013, 20:56  [ТС]     Чтение символов из строки #9
ни одной переменной AnsiString не использую, библиотека string подключена. Переменные string
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 21:12     Чтение символов из строки #10
Mind_Hunter, полный код в студию. И какая у Вас среда?
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;
}
//---------------------------------------------------------------------------
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 22:41     Чтение символов из строки #12
Mind_Hunter, где Вы тут используете find и erase?

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

Не по теме:

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

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;
}
//---------------------------------------------------------------------------
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 23:15     Чтение символов из строки #14
Mind_Hunter, ага. Теперь вижу AnsiString. И что у Вас не срабатывает?
Mind_Hunter
2 / 0 / 1
Регистрация: 25.12.2011
Сообщений: 120
30.04.2013, 23:18  [ТС]     Чтение символов из строки #15
Я строки из листбокса беру поочередно, разбиваю на две подстроки и их присваиваю в массивы beginmas и finalmas, а потом ищу совпадение в строке slovo. Если с beginmas есть совпадение, то эти символы в slovo меняются на символы элемента finalmas с тем же индексом, что и beginmas. а он по всей видимости не присваивает подстроки в эти массивы, ибо на выходе получаю то же слово, которое ввел в начале
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 23:30     Чтение символов из строки #16
Я не сильно знаком с функцией SubString, но судя по этому, Вы Temp присваиваете 1 символ, после чего пытаетесь элементу beginmas[i](это символ) присвоить значение длинной в 2 символа, начиная с позиции 1, хотя нумерация с 0,а всего элементов 1. Или я не понимаю, что это за функция и как она работает, или я не понимаю как оно вообще скомпилировалось.

Добавлено через 48 секунд
Я про этот участок кода
Цитата Сообщение от Mind_Hunter Посмотреть сообщение
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;
}
Mind_Hunter
2 / 0 / 1
Регистрация: 25.12.2011
Сообщений: 120
30.04.2013, 23:34  [ТС]     Чтение символов из строки #17
Ну beginmas это AnsiString массив. А temp=RulesListBox->Items->Strings[i] - это строка из листбокса, она из 5-6 символов состоит. Вот тут то я и залип.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 23:38     Чтение символов из строки #18
Цитата Сообщение от Mind_Hunter Посмотреть сообщение
Вот тут то я и залип.
В смысле?
Mind_Hunter
2 / 0 / 1
Регистрация: 25.12.2011
Сообщений: 120
30.04.2013, 23:39  [ТС]     Чтение символов из строки #19
В том, что вроде написано все правильно, но ровным счетом ничего не происходит
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2013, 23:45     Чтение символов из строки
Еще ссылки по теме:

C++ Удалить конец строки символов. Ввести кол-во удаляемых символов , вывести результат ,String ,задачка,С++
C++ Чтение символов из cin в буфер в цикле
C++ Чтение UNICODE символов из STDOUT процесса
C++ Путь к файлу и чтение матрицы символов
Ошибка ввода символов строки, при количестве символов кратных 8 C++

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

Или воспользуйтесь поиском по форуму:
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 23:45     Чтение символов из строки #20
Советую задать этот же вопрос в разделе "Visual c++ и базы данных". Лично я пока ничем не могу помочь пока что.
Yandex
Объявления
30.04.2013, 23:45     Чтение символов из строки
Ответ Создать тему
Опции темы

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