Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Ошибка StrToChar в C++  (Прочитано 3567 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mlepehin

  • Автор темы
  • Любитель
  • *
  • Сообщений: 68
  • Скорее бы лето!
    • Просмотр профиля
    • Сайт Михаила Лепёхина
Ошибка StrToChar в C++
« : 13 Октября 2012, 16:17:15 »
Программа не может перевести значение переменной типа string в тип char. В значении только одна буква, и по идее всё должно работать.
#include<iostream>
#include<fstream>
using namespace std;
int main(){
ifstream cin("input.txt");
ofstream cout("output.txt");
int a=0,b=0;
char l[8],l2[8],l1[8];
string x[8];
for(int i=0;i<8;i++){
cin>>l[i];
x[i]=l[i];
}
for(int i=0;i<8;i++){
if(x[i]=="1"||x[i]=="2"||x[i]=="3"||x[i]=="4"||x[i]=="5"||x[i]=="6"||x[i]=="7"||x[i]=="8"||x[i]=="9"||x[i]=="0"){l1[i]=strToChar(x[i]);
a=a+1;}
else{
l2[i]=strToChar(x[i]); 
b=b+1;   
}
}
for(int i=0;i<a;i++){
cout<<l1[i];
}
cout<<"|";
for(int i=0;i<b;i++){
cout<<l2[i];                 
}
}

Идея программы в том, что в файле input.txt введена строка ad2e57b6, а в файл output.t5xt надо вывести 2576adeb, то есть перенести цифры в начало.
« Последнее редактирование: 13 Октября 2012, 16:21:45 от mlepehin »
Mr. M. Lepehin

Lifewalker

  • Гость
Re: Ошибка StrToChar в C++
« Ответ #1 : 13 Октября 2012, 16:41:09 »
В Си++ нет встроенного типа string, есть определённый в stl класс string. От понимания этого и пляшите. Если вы хотите вынуть из строки символ, то обращаться нужно к методу (точнее оператору, но один чёрт) [] класса string или достаньте Си-строку методом c_str, а затем уж её ломайте.

А вообще, в порядке поучения, программа написана ужасно, как стилистически так и оформительски. Ужасно. Разобраться почти невозможно.
« Последнее редактирование: 13 Октября 2012, 16:45:03 от Lifewalker »

Оффлайн Gekko

  • Участник
  • *
  • Сообщений: 222
    • Просмотр профиля
Re: Ошибка StrToChar в C++
« Ответ #2 : 13 Октября 2012, 17:58:40 »
Программа не может перевести значение переменной типа string в тип char. В значении только одна буква, и по идее всё должно работать.
#include<iostream>
#include<fstream>
using namespace std;
int main(){
ifstream cin("input.txt");
ofstream cout("output.txt");
int a=0,b=0;
char l[8],l2[8],l1[8];
string x[8];
for(int i=0;i<8;i++){
cin>>l[i];
x[i]=l[i];
}
for(int i=0;i<8;i++){
if(x[i]=="1"||x[i]=="2"||x[i]=="3"||x[i]=="4"||x[i]=="5"||x[i]=="6"||x[i]=="7"||x[i]=="8"||x[i]=="9"||x[i]=="0"){l1[i]=strToChar(x[i]);
a=a+1;}
else{
l2[i]=strToChar(x[i]); 
b=b+1;   
}
}
for(int i=0;i<a;i++){
cout<<l1[i];
}
cout<<"|";
for(int i=0;i<b;i++){
cout<<l2[i];                 
}
}

Идея программы в том, что в файле input.txt введена строка ad2e57b6, а в файл output.t5xt надо вывести 2576adeb, то есть перенести цифры в начало.


А что такое strToChar() ? Первый раз в жизни вижу такую функцию.....

Пользователь решил продолжить мысль 13 Октября 2012, 18:04:23:
И что это за перверзия? if(x[i]=="1"||x[i]=="2"||x[i]=="3"||x[i]=="4"||x[i]=="5"||x[i]=="6"||x[i]=="7"||x[i]=="8"||x[i]=="9"||x[i]=="0")
Почему бы не написать
if(x[i]<= "9")

Пользователь решил продолжить мысль 13 Октября 2012, 18:08:10:
И зачем это? a = a + 1; почему бы не написать a++;
« Последнее редактирование: 13 Октября 2012, 18:08:10 от Gekko »
Xubuntu 12.04 LTS с Xfce 4.10

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Ошибка StrToChar в C++
« Ответ #3 : 13 Октября 2012, 18:13:16 »
...
Почему бы не написать
if(x[i]<= "9")


А точнее,
if (x[i]>="0" && x[i]<="9")
Делюсь знаниями, но их у меня мало!

Оффлайн Zeka13

  • Старожил
  • *
  • Сообщений: 1177
  • 18.10 Gnome x64 GTX 970
    • Просмотр профиля
Re: Ошибка StrToChar в C++
« Ответ #4 : 13 Октября 2012, 20:18:42 »
mlepehin, пользуйтесь http://paste.ubuntu.com/
Если Wine - это костыль , то  Punto Switcher - это протез , а Daemon Tools инвалидное кресло.

Оффлайн mlepehin

  • Автор темы
  • Любитель
  • *
  • Сообщений: 68
  • Скорее бы лето!
    • Просмотр профиля
    • Сайт Михаила Лепёхина
Re: Ошибка StrToChar в C++
« Ответ #5 : 14 Октября 2012, 12:40:56 »
Я разобрался. Просто создал массив типа string. Теперь у меня другой вопрос. Как определить длину строки в c++? Потому что, пока ещё программа может работать только со строками, где 8 символов.


Предварительный код: #include<iostream>
#include<fstream>
using namespace std;
int main(){
ifstream cin("input.txt");
ofstream cout("output.txt");
int a=0,b=0;
char l[8];
string x[8],l1[8],l2[8];
for(int i=0;i<8;i++){
cin>>l[i];
x[i]=l[i];
}
for(int i=0;i<8;i++){
if(x[i]<="9"){l1[a]=x[i];
a=a+1;}
else if(x[i]<="z"){
l2[b]=x[i]; 
b=b+1;   
}
else{
cout<<"Nedopustimiy symvol - '"<<x[i]<<"'";   
return 0;         
}
if(x[i]=="&"){
cout<<"Nedopustimiy symvol - '"<<x[i]<<"'";   
return 0;         
}
}
for(int i=0;i<a;i++){
cout<<l1[i];
}
for(int i=0;i<b;i++){
cout<<l2[i];                 
}
return 0;
}
« Последнее редактирование: 14 Октября 2012, 12:43:40 от mlepehin »
Mr. M. Lepehin

Оффлайн Zeka13

  • Старожил
  • *
  • Сообщений: 1177
  • 18.10 Gnome x64 GTX 970
    • Просмотр профиля
Re: Ошибка StrToChar в C++
« Ответ #6 : 14 Октября 2012, 12:44:15 »
Если Wine - это костыль , то  Punto Switcher - это протез , а Daemon Tools инвалидное кресло.

Lifewalker

  • Гость
Re: Ошибка StrToChar в C++
« Ответ #7 : 14 Октября 2012, 15:46:15 »
Я разобрался.
Нет, не разобрался.

Просто создал массив типа string.
Самое глупое решение из возможных. Ещё раз для невнимательных. В Си++ нет типа строки, в stl есть класс строка. Обращаться этой строке нужно не как к встроенному типу, а как к классу. Разберитесь в этом, наконец!

Вообще, ваша задача решается программой в 10 строк с применением пары крохотных символьных массивов, стандартных процедур isalpha и isdigit и цикла while (или аналогичным методом). Безо всяких классов и прочей «Си++»-ной мути.

Теперь у меня другой вопрос. Как определить длину строки в c++?
Банально! Через метод класса string! Описание класса string ищите в документации к stl.

(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 14 Октября 2012, 15:48:35 от Lifewalker »

Оффлайн Gekko

  • Участник
  • *
  • Сообщений: 222
    • Просмотр профиля
Re: Ошибка StrToChar в C++
« Ответ #8 : 14 Октября 2012, 16:00:45 »


А точнее,
if (x[i]>="0" && x[i]<="9")


Судя по коду, отрицательных величин там нет.
Xubuntu 12.04 LTS с Xfce 4.10

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 755
    • Просмотр профиля
Re: Ошибка StrToChar в C++
« Ответ #9 : 15 Октября 2012, 10:54:00 »


А точнее,
if (x[i]>="0" && x[i]<="9")


Судя по коду, отрицательных величин там нет.

Если я правильно понял, то тут же символы сравниваются. И могут быть символы (чисто гипотетически), код которого меньше '0'.

Оффлайн Gekko

  • Участник
  • *
  • Сообщений: 222
    • Просмотр профиля
Re: Ошибка StrToChar в C++
« Ответ #10 : 15 Октября 2012, 12:03:06 »

Если я правильно понял, то тут же символы сравниваются. И могут быть символы (чисто гипотетически), код которого меньше '0'.

Судя по коду, x имеет тип строки (string) отрицательное значение может быть только у числового типа (int, float и т.п.), даже если строка будет содержать В СЕБЕ знак минуса, она так и останется строкой.

Пользователь решил продолжить мысль 15 Октября 2012, 12:07:24:
Вообще весь код, бред какой-то..... даже инструкция if (x[i]<="9") выглядит уродливо, потому, как сравнение строкового типа по образу и подобию численного не правильно.....  но это уже, дело автора топика.
« Последнее редактирование: 15 Октября 2012, 12:07:24 от Gekko »
Xubuntu 12.04 LTS с Xfce 4.10

Оффлайн Дядюшка Ау

  • Участник
  • *
  • Сообщений: 123
  • Дайте две!
    • Просмотр профиля
Re: Ошибка StrToChar в C++
« Ответ #11 : 23 Октября 2012, 09:06:59 »
Это лаба такая? Нас за отсутствие оступов в коде жестоко карали. А еще надо бы Вам учебник хоть какой-то почитать, а то от форума можно добиться чего-либо, только обладая какими-то базовыми знаниями. Вообще без знаний и помощь впрок не пойдет, вы ее не поймете все равно.
Ubuntu 12.04 для поколупацца, Win7 для поработать

 

Страница сгенерирована за 0.037 секунд. Запросов: 26.