Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ошибка в коде при присваивании значения переменной, ошибка кода значение переменной 
V
    Опции темы
kshyms
  Дата 26.11.2011, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 303
Регистрация: 30.8.2006
Где: Душанбе

Репутация: нет
Всего: 0



Код

string q1; 
std::getline(std::cin, q1);
q1 = iconv (q1 "DOS866" , q1 "UTF-8", q1 str);


Может так лучше?

Это сообщение отредактировал(а) kshyms - 26.11.2011, 15:44
PM MAIL WWW Skype   Вверх
xvr
Дата 26.11.2011, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(kshyms @  26.11.2011,  15:03 Найти цитируемый пост)
Может так лучше?

Компилятор это не поймет  smile 
PM MAIL   Вверх
kshyms
Дата 26.11.2011, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 303
Регистрация: 30.8.2006
Где: Душанбе

Репутация: нет
Всего: 0



 smile 
Код

q1 = iconv ("DOS866" ,  "UTF-8", q1);


Это сообщение отредактировал(а) kshyms - 26.11.2011, 18:05
PM MAIL WWW Skype   Вверх
kshyms
  Дата 27.11.2011, 05:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 303
Регистрация: 30.8.2006
Где: Душанбе

Репутация: нет
Всего: 0



Я думаю, исходя из того , что я прочел: "Лучше строку русских букв транслировать в бинарный код и всего делов - то...". 
например 
setlocale(LC_ALL,"ru_RU.CP1251");
"Привет" 
//  в Unicode
"%EF%F0%E8%E2%E5%F2";


Это сообщение отредактировал(а) kshyms - 27.11.2011, 11:17
PM MAIL WWW Skype   Вверх
xvr
Дата 27.11.2011, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(kshyms @  27.11.2011,  05:13 Найти цитируемый пост)
Я думаю, исходя из того , что я прочел: 

Читайте дальше - это не Unicode, а ESC кодирование в URL (что не имеет ничего общего с Unicode'ом)

PM MAIL   Вверх
kshyms
Дата 28.11.2011, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 303
Регистрация: 30.8.2006
Где: Душанбе

Репутация: нет
Всего: 0



Код


#include <cmath>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
#include <string.h>
#include <iostream>
#include "russia.h"
#include <fstream>
#include <windows.h>

using namespace std;
int main ()
{
int wctomb(char *out, wchar_t in);
setlocale(LC_ALL,"CP1251");
    int simple_function(void* p, long size); // прототип
 int  a1; // объявление двух переменных a и b целого типа данных. 
string q1; 
std::getline(std::cin, q1);
for (size_t i = 0; i < q1.size(); i++)
if (q1[i] == 'Ў') q1[i] = '%D0%B0';
 _getch();
  return 0;
}

Уже почти близко к решению
PM MAIL WWW Skype   Вверх
bsa
Дата 29.11.2011, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Зачем тебе все эти хидеры?!? Ты используешь только <clocale>, <iostream>, <cstring> и <string>.
Зачем объявляешь функции внутри main()? Почему нельзя это сделать перед? Тем более, что wctomb - это стандартная. (подчеркивание только добавь в начало).
Код
if (q1[i] == 'Ў') q1[i] = '%D0%B0';
Не скомпилируется.
Код
std::string escapeString(const std::string &url)
{
   std::stringstream ret;
   for(std::string::const_iterator it = url.begin(), end = url.end(); it != end; ++it) {
       const unsigned char c = *it;
       if ((c > 127) || (c < 0x21) || (c == '%')) //не экранируются символы ASCII, за исключением пробела и процента
           ret << '%' << std::hex << std::setw(2) << std::setfill('0') << (int)c << std::setw(0);
       else
           ret << (char)c;
   }
   return ret.str();
}

PM   Вверх
kshyms
Дата 29.11.2011, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 303
Регистрация: 30.8.2006
Где: Душанбе

Репутация: нет
Всего: 0



bsa, 
Код

#include <clocale>
#include <iostream>
#include <cstring> 
#include <string>
#include <stdlib.h>
using namespace std;
int main ()
{
string q1; 
std::getline(std::cin, q1);  

std::string escapeString(const std::string &url)
 &url= q1;  
{
   std::stringstream ret;
   for(std::string::const_iterator it = url.begin(), end = url.end(); it != end; ++it) {
       const unsigned char c = *it;
       if ((c > 127) || (c < 0x21) || (c == '%')) //не экранируются символы ASCII, за исключением пробела и процента
           ret << '%' << std::hex << std::setw(2) << std::setfill('0') << (int)c << std::setw(0);
       else
           ret << (char)c;
   }
   return ret.str();
}

код не компилируется 

Это сообщение отредактировал(а) kshyms - 29.11.2011, 15:37
PM MAIL WWW Skype   Вверх
bsa
Дата 29.11.2011, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(kshyms @  29.11.2011,  16:26 Найти цитируемый пост)
код не компилируется 

сочувствую. ты сам привнес ошибки. если ты отформатируешь код, то найдешь синтаксические ошибки. а еще нужно подключить хидер <sstream>.
PM   Вверх
kshyms
Дата 30.11.2011, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 303
Регистрация: 30.8.2006
Где: Душанбе

Репутация: нет
Всего: 0



Код

#include <cmath>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
#include <iostream>
#include <fstream>
#include <ctype.h> 
#include <conio.h> 
#include <string.h>
#include <windows.h> 
using namespace std;
int main ()
{
std::string str[]= "привет";

str = tolower str;//конвертация буквы к нижнему регистру если это буква и она в верхнем регистре*
char c;
  while (str[i])
  {
    c=str[i];
    putchar (tolower(c));
    i++;
  }
str = toascii str;//конвертация в символ набора ASCII
//std::replace(str.begin(), str.end(), ':', ' ');
std::replace(str.begin(), str.end(), '\430', '%D0%B0');
std::replace(str.begin(), str.end(), '\431', '%D0%B1');
std::replace(str.begin(), str.end(), '\432', '%D0%B2');
std::replace(str.begin(), str.end(), '\433', '%D0%B3');
std::replace(str.begin(), str.end(), '\434', '%D0%B4');
std::replace(str.begin(), str.end(), '\435', '%D0%B5');
std::replace(str.begin(), str.end(), '\436', '%D0%B6');
std::replace(str.begin(), str.end(), '\437', '%D0%B7');
std::replace(str.begin(), str.end(), '\438', '%D0%B8');
std::replace(str.begin(), str.end(), '\439', '%D0%B9');
std::replace(str.begin(), str.end(), '\43A', '%D0%BA');
std::replace(str.begin(), str.end(), '\43B', '%D0%BB');
std::replace(str.begin(), str.end(), '\43C', '%D0%BC');
std::replace(str.begin(), str.end(), '\43D', '%D0%BD');
std::replace(str.begin(), str.end(), '\43E', '%EE');
std::replace(str.begin(), str.end(), '\43F', '%EF');
std::replace(str.begin(), str.end(), '\440', '%F0');
std::replace(str.begin(), str.end(), '\441', '%F1');
std::replace(str.begin(), str.end(), '\442', '%D1%82');
std::replace(str.begin(), str.end(), '\443', '%D1%83');
std::replace(str.begin(), str.end(), '\444', '%D1%84');
std::replace(str.begin(), str.end(), '\445', '%D1%84');
std::replace(str.begin(), str.end(), '\446', '%D1%86');
std::replace(str.begin(), str.end(), '\447', '%D1%87');
std::replace(str.begin(), str.end(), '\448', '%D1%88');
std::replace(str.begin(), str.end(), '\449', '%D1%89');
std::replace(str.begin(), str.end(), '\44A', '%D1%8A');
std::replace(str.begin(), str.end(), '\44B', '%D1%8B');
std::replace(str.begin(), str.end(), '\44C', '%D1%8C');
std::replace(str.begin(), str.end(), '\44D', '%D1%8D');
std::replace(str.begin(), str.end(), '\44E', '%D1%8E');
std::replace(str.begin(), str.end(), '\44F', '%D1%8F');
     cout << str;
     system("PAUSE");
      return 0;
}




По идее должны заменяться  русские буквы формата  MS-Dos на коды URL?

Это сообщение отредактировал(а) kshyms - 30.11.2011, 16:32
PM MAIL WWW Skype   Вверх
bsa
Дата 30.11.2011, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(kshyms @  30.11.2011,  17:02 Найти цитируемый пост)
По идее должны заменяться  русские буквы формата  MS-Dos на коды URL?

По чьей идее?
А по-моему не должны. Вообще даже скомпилироваться не должно. Так как в апострофах у тебя должен быть один символ, а не 6.
Код
#include <sstream>
#include <iomanip>
#include <string>

std::string escapeString(const std::string &url)
{
   std::stringstream ret;
   for(std::string::const_iterator it = url.begin(), end = url.end(); it != end; ++it) {
       const unsigned char c = *it;
       if ((c > 127) || (c < 0x21) || (c == '%')) //не экранируются символы ASCII, за исключением пробела и процента
           ret << '%' << std::hex << std::setw(2) << std::setfill('0') << (int)c << std::setw(0);
       else
           ret << (char)c;
   }
   return ret.str();
}

int main()
{
    std::string str = "привет";
    std::cout << escapeString(str) << std::endl;
    return 0;
}


Добавлено через 4 минуты и 11 секунд
во-первых, нет такого понятия "коды URL".
во-вторых, тебе необходимо сначала сконвертировать строку в UTF-8, а затем уже делать преобразование к допустимому формату (экранирование). Почитай тему ниже про unicode.
Ты же это делаешь совершенно грубым образом, прибивая наглухо гвоздями к определенному набору символов. Причем в нем нет ни заглавных, ни буквы Ё.
PM   Вверх
mes
Дата 30.11.2011, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(kshyms @  30.11.2011,  15:02 Найти цитируемый пост)
std::replace(str.begin(), str.end(),
std::replace(str.begin(), str.end(), 
std::replace(str.begin(), str.end(), 
std::replace(str.begin(), str.end(), 
std::replace(str.begin(), str.end(), 
std::replace(str.begin(), str.end(), 
std::replace(str.begin(), str.end(), 
std::replace(str.begin(), str.end(), 
... 

бррр  smile неужто самому глаз не режет ?!



--------------------
PM MAIL WWW   Вверх
kshyms
Дата 30.11.2011, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 303
Регистрация: 30.8.2006
Где: Душанбе

Репутация: нет
Всего: 0



Код

#include <cmath>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
#include <iostream>
#include <fstream>
#include <ctype.h> 
#include <conio.h> 
#include <string.h>
#include <windows.h> 
using namespace std;
int main ()
{
std::string str[]= "привет";

str = tolower str;//конвертация буквы к нижнему регистру если это буква и она в верхнем регистре*
char c;
  while (str[i])
  {
    c=str[i];
    putchar (tolower (C) || toascii(C);
    i++;
  }

     cout << str;
     system("PAUSE");
      return 0;
}


Это сообщение отредактировал(а) kshyms - 30.11.2011, 16:47
PM MAIL WWW Skype   Вверх
bsa
Дата 30.11.2011, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



kshyms, ох. Ты вообще сам понимаешь, что ты пишешь? Какой-то случайный набор функций и операторов.
Может перед написанием программы ознакомиться с языком стоит?
Кстати,  tolower() с русским языком тебе не поможет.
PM   Вверх
kshyms
Дата 30.11.2011, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 303
Регистрация: 30.8.2006
Где: Душанбе

Репутация: нет
Всего: 0



Код

#include <cmath>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
#include <iostream>
#include <fstream>
#include <ctype.h> 
#include <conio.h> 
#include <string.h>
#include <windows.h>
#include <stdio.h>
#include <ctype.h>
int main ()
{
  int i=0;
  char str[]="Привет";
  char c;
  while (str[i])
  {
    c=str[i];
   // putchar (tolower(c));
    putchar (toascii(c));
    i++;
  }
   system("PAUSE");   
      return 0;
}

а toascii ? Вроде так ошибку не выдает



Это сообщение отредактировал(а) kshyms - 30.11.2011, 18:37
PM MAIL WWW Skype   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0615 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.