Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Как разбить строку на символы?


Автор: Данкинг 31.1.2007, 20:53
Не сомневаюсь, что подобное неоднократно обсуждалось, но найти не смог. Суть вопроса: есть текстовое поле (EDIT). Требуется взять из него строку и посчитать сумму ASCII-кодов символов в ней. Вопрос с том, как мне разбить строку на символы??

Автор: Sartorius 31.1.2007, 20:55
 Чего то я MFC забыл уже ... у CString индексатор разве не перегружен?

Автор: Данкинг 31.1.2007, 20:58
В смысле, индексатор? Я С++ 2 недели изучаю, мне подробней желательно! smile 

Автор: Sartorius 31.1.2007, 21:03
Вобщем чего то такое
Код

CString str;
int sum = 0;
for(int i = 0; i < str.length(); i++)
{
    sum += str[i];
}

Автор: Данкинг 31.1.2007, 21:21
Вот как я сделал, компилируется нормально, но при работе программа вылетает с "Access violation".

m_edit - это переменная, связанная с EDIT.

Код

void CTestDlg::OnButton2() 
{
UpdateData(true);
if (m_edit.GetLength()==0) 
{AfxMessageBox("Óêàæèòå íèê!");
}
else
{l=0;
 for(int j = 1; m_edit.GetLength(); j++)
  {
     l=l+m_edit[j];
 }


Э-э-э... Тут я понял, что Int приравниваю CString. А как получить ASCII-код символа?....

Автор: Greeen 1.2.2007, 01:31
Код

for(int j = 1; m_edit.GetLength(); j++)

Товаришч, у тебя тут бесконечный цикл получается.
Код

int nSumm = 0;
CString strText;
GetDlgItemText(IDC_YOUR_EDIT, strText);
for(int i = 0; i < strText.GetLength(); i++)
     nSumm += strText[i];

Автор: Nuzur 1.2.2007, 11:59
Данкинг, Может лучше сначала еорию полистать?

Код

for(int j = 1; m_edit.GetLength(); j++)
  {
     l=l+m_edit[j];
 }


1. Начнем с того что индексация масива иден с 0-ля, что значит что в твоем варианте пропущен 1-й символ, который 0-й в масиве.
2. Access vioaltion ты получаеш поскольку в for 2-м пунктом идет условие окончание цИкла. А у тебя m_edit.GetLength() возвращяет длинну строки. Проще говоря если в строке хоть что-то есть продолжеть до боли в памяти smile
3. l=l+m_edit[j]; С паскаля переходиш? ЧитаБЕльней так l += m_edit[j];
4. От греха подале лучше все-таки переконвертить, незнаю параноя у меня нверно l += int(m_edit[j]);

Удачи!

Автор: Данкинг 1.2.2007, 12:25
Насчёт индексации с нуля не понял: к примеру, в слова "строка" первая "с" - это нулевой символ получается, а не первый?

А в теории я мало чего понимаю, мне проще сразу осваивать на практических примерах, попутно понимая и теорию. smile 

Автор: Nuzur 1.2.2007, 14:27
Данкинг, именно. Все индексы начинаются с 0-ля smile

ЗЫ Вел я как-то один проект после такого как ты. К его и моему счастью я не знал ни его имени ни как зовут. Иначе я б сел а он слег. Теория она для того и пишется что б люди понимали что делают. Ладно харе флудить.

Автор: Данкинг 1.2.2007, 14:34
Угу, вопрос решён, всем спасибо! smile 

Автор: cir 6.2.2007, 09:14
k:=0; i:=1; for i:=1 to 5 do begin k:=k+2 end;

Добавлено @ 09:15 
Код

k:=0; i:=1; for i:=1 to 5 do begin k:=k+2 end; 


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)