Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
2 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 120
1

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

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

Мне нужно из строковой переменной считать символы. То есть, например, имеем строку 56->57. Нужно считать символы до ' - ', в другую переменную того же типа. Как сие сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.04.2013, 19:26
Ответы с готовыми решениями:

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

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

Чтение строки символов из файла
Здравствуйте! Помогите найти ошибку в программе. Необходимо из уже созданного текстового файла...

Чтение символов только первой строки из файла .txt
Доброе время суток. Подскажите, как считать символы в первой строке текстового файла, пример ...

23
243 / 244 / 38
Регистрация: 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
2 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 120
30.04.2013, 20:15  [ТС] 3
Спасибо, все работает!

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

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

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

Не по теме:

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

0
2 / 0 / 0
Регистрация: 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
243 / 244 / 38
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 23:15 14
Mind_Hunter, ага. Теперь вижу AnsiString. И что у Вас не срабатывает?
0
2 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 120
30.04.2013, 23:18  [ТС] 15
Я строки из листбокса беру поочередно, разбиваю на две подстроки и их присваиваю в массивы beginmas и finalmas, а потом ищу совпадение в строке slovo. Если с beginmas есть совпадение, то эти символы в slovo меняются на символы элемента finalmas с тем же индексом, что и beginmas. а он по всей видимости не присваивает подстроки в эти массивы, ибо на выходе получаю то же слово, которое ввел в начале
0
243 / 244 / 38
Регистрация: 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;
}
0
2 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 120
30.04.2013, 23:34  [ТС] 17
Ну beginmas это AnsiString массив. А temp=RulesListBox->Items->Strings[i] - это строка из листбокса, она из 5-6 символов состоит. Вот тут то я и залип.
0
243 / 244 / 38
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 23:38 18
Цитата Сообщение от Mind_Hunter Посмотреть сообщение
Вот тут то я и залип.
В смысле?
0
2 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 120
30.04.2013, 23:39  [ТС] 19
В том, что вроде написано все правильно, но ровным счетом ничего не происходит
0
243 / 244 / 38
Регистрация: 08.04.2013
Сообщений: 927
30.04.2013, 23:45 20
Советую задать этот же вопрос в разделе "Visual c++ и базы данных". Лично я пока ничем не могу помочь пока что.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2013, 23:45

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Используя множество символов первой строки, удалить все вхождения этих символов из второй строки
Реализовать вариант задачи, используя множества, двумя способами: в виде процедуры и с помощью...

Получить из этих строк новую строку, объединив N1 первых символов строки S1 и N2 последних символов строки S2.
1. Даны два числа: N1 и N2, и две строки: S1 и S2. Получить из этих строк новую строку, объединив...

Создать новую строку из N первых символов считанного из файла строки и E последних символов другой строки
Создать новую строку из N первых символов считанных из файла строк и E последних символов другой...

Используя множество символов первой строки, удалить все вхождения этих символов из второй строки
Реализовать вариант задачи, используя множества, двумя способами: в виде процедуры и с помощью...

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

Получить из данных строк новую, объединив N первых символов строки S1 и N2 последних символов строки S2
Здравствуйте, не могли бы вы помочь мне с этим заданием? Даны два числа: N1 и N2, и две строки: S1...


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

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

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