Russian Qt Forum

Qt => Общие вопросы => Тема начата: Firefox от Ноябрь 30, 2009, 13:33



Название: Char
Отправлено: Firefox от Ноябрь 30, 2009, 13:33
помогите в таком вопросе. есть массив
Код:
char mass[300]={1,2,3,4,56,74,23,'g',t'}....
в этом массиве вперемешку записаны должны быть буквы и цифры. не могу вывести в техtEdit правильно, если вывожу как int то букв нет, а если как QString то на месте цифр квадраты.
возможно мне надо заполнять весь массив цифрами(которые будут означать коды букв и цифр), а потом переводить всё в текст... как я поняла char это массив чисел от 0 до 255...


Название: Re: Char
Отправлено: Igors от Ноябрь 30, 2009, 13:54
Код:
QString s;
for (int i = 0; i < 200; ++i) {
  QChar c(mass[i]);
  if (c.isLetter()) s += c;
  else s += QString().setNum(mass[i]);
}


Название: Re: Char
Отправлено: SASA от Ноябрь 30, 2009, 16:26
Я бы использовал
Код:
QString::number(mass[i])


Название: Re: Char
Отправлено: Firefox от Ноябрь 30, 2009, 22:58
Спасибо попробую :D


Название: Re: Char
Отправлено: Tonal от Декабрь 02, 2009, 10:05
В этом массиве у тебя записаны только символы. char в С++ это тот же int, только маленький. :)
А массив из символов или чисел в С++ не поддерживается.

В зависимости от того, зачем тебе это нужно можно придумать несколько вариантов решения. :)


Название: Re: Char
Отправлено: Firefox от Декабрь 04, 2009, 16:57
массив именно такой поменять ни как.этот вопрос я реализовала всё выводиться правильно. массив может состоять как из чисел так и из букв причём 0 тоже может быть в массиве, но теперь проблема в другом. надо написать "пока не наступит конец массива".то есть например в массив записали 10 букв с цифрами вперемешку. а остальные 390 он дополняет сам нулями. и мне надо вывести из массива только те 10 букв/цифр. но я не знаю сколько их. если написать
Код:
while (mass[i]!='\0')
то если скажем будет в массиве"к2пе5рр0шк", то после 0 он ничего не выведет. как сделать так чтоб он выводил только то что мне надо?


Название: Re: Char
Отправлено: BRE от Декабрь 04, 2009, 17:03
массив именно такой поменять ни как.этот вопрос я реализовала всё выводиться правильно. массив может состоять как из чисел так и из букв причём 0 тоже может быть в массиве, но теперь проблема в другом. надо написать "пока не наступит конец массива".то есть например в массив записали 10 букв с цифрами вперемешку. а остальные 390 он дополняет сам нулями. и мне надо вывести из массива только те 10 букв/цифр. но я не знаю сколько их. если написать
Код:
while (mass[i]!='\0')
то если скажем будет в массиве"к2пе5рр0шк", то после 0 он ничего не выведет. как сделать так чтоб он выводил только то что мне надо?
Ну и храни отдельно в переменной количество значений.


Название: Re: Char
Отправлено: Alp от Декабрь 04, 2009, 20:39
Я вот не могу все же понять каким магическим образом выводится то одно то другое? То цифры то буквы? Например, 65 - это цифра 65 или символ 'A'?

Потом, что касаемо нуля - в конце массива СИМВОЛ '0' или символ с нулевым КОДОМ \x0? Если символ - проблемы нет, если код - то только хранить доп.переменной размер массива, C++ - это не питон.


Название: Re: Char
Отправлено: Firefox от Декабрь 05, 2009, 22:40
Дело в том что этот массив мне пересылают по сети уже в заполненном виде. поэтому я не знаю сколько элементов там заполнено.а мне надо эти элементы вывести на экран.


Название: Re: Char
Отправлено: BRE от Декабрь 05, 2009, 22:45
Дело в том что этот массив мне пересылают по сети уже в заполненном виде. поэтому я не знаю сколько элементов там заполнено.а мне надо эти элементы вывести на экран.
Ну тогда нужно использовать библиотеку libastral.


Название: Re: Char
Отправлено: Alp от Декабрь 06, 2009, 00:27
Дело в том что этот массив мне пересылают по сети уже в заполненном виде. поэтому я не знаю сколько элементов там заполнено.а мне надо эти элементы вывести на экран.
И более того, ты не знаешь что выводить первым - число или символ, если на первой позиции, например, стоит 65 или подобное? Задача несколько эээ... бредовая, в стиле "мне присылают что-нибудь и с чем-нибудь что-нибудь надо сделать".


Название: Re: Char
Отправлено: spectre71 от Декабрь 06, 2009, 07:44
помогите в таком вопросе. есть массив
Код:
char mass[300]={1,2,3,4,56,74,23,'g',t'}....
в этом массиве вперемешку записаны должны быть буквы и цифры. не могу вывести в техtEdit правильно, если вывожу как int то букв нет, а если как QString то на месте цифр квадраты.
возможно мне надо заполнять весь массив цифрами(которые будут означать коды букв и цифр), а потом переводить всё в текст... как я поняла char это массив чисел от 0 до 255...
массив именно такой поменять ни как.этот вопрос я реализовала всё выводиться правильно. массив может состоять как из чисел так и из букв причём 0 тоже может быть в массиве, но теперь проблема в другом. надо написать "пока не наступит конец массива".то есть например в массив записали 10 букв с цифрами вперемешку. а остальные 390 он дополняет сам нулями. и мне надо вывести из массива только те 10 букв/цифр. но я не знаю сколько их. если написать
Код:
while (mass[i]!='\0')
то если скажем будет в массиве"к2пе5рр0шк", то после 0 он ничего не выведет. как сделать так чтоб он выводил только то что мне надо?

Превое что тебе необходимо сделать это описать задачу в нормальных терминах!!!
Не называй числа - цифрами, а символы - буквами.
Если мы говорим о
Код:
mass[i]
, то это i-й элемент имеющий определенное значение.

Теперь ответь на вопросы:
1) Массив всегда одного размера? Если массив одного размера, то его размер 300?
2) Массив всегда заполнен полностью или нет? Если нет, то каким образом определяется граница значимой части.
3) Как ты  интерпретируешь значения элементов массива?
 - значения соответствующие кодам букв латинского алфавита - как символы?
 - значения соответствующие кодам цифр - как символы?
 - остальное как числа?
 А могут несколько подряд идущих элементов массива интерпрретироваться как одно число или каждый элемент всегда рассматривается отдельно?
Опиши подробнее, что и как интерпретируется!


Название: Re: Char
Отправлено: michael1960 от Декабрь 06, 2009, 09:35
По моему лучше всего проверять ACSII код символа. В смысле, допускаем что все что ты получаеш - символ, тогда проверка будет выглядеть так:
Код:

char s[300];

.

if((s[i] >= '0') && (s[i] <= '9'))
  это цифра
else
  буква.


Название: Re: Char
Отправлено: Firefox от Декабрь 07, 2009, 13:14
Всем спасибо. предложенное решение полностью соответствует тому что я хотела сделать
Код:

QString s;
for (int i = 0; i < 200; ++i) {
  QChar c(mass);
  if (c.isLetter()) s += c;
  else s += QString().setNum(mass);
}
полностью соответствует тому что я хотела сделать


Название: Re: Char
Отправлено: SASA от Декабрь 07, 2009, 19:30
На  C++ Вы выражаетесь понятней  ;D
Но, по-моему, с ошибками...


Название: Re: Char
Отправлено: Firefox от Декабрь 15, 2009, 12:23
утверждение это цифра как выразить кодом?и получается у букв и знаков(точка, запятая, пробел...) 100% коды больше 9? и ещё вот так как я сделала у меня пробел выводит числом 32,как это побороть?


Название: Re: Char
Отправлено: Пантер от Декабрь 15, 2009, 12:35
Может лучше так?
Код
C++ (Qt)
QString s;
for (int i = 0; i < 200; ++i) {
 QChar c(mass[i]);
 if (c.isDigit()) s += QString::number(mass[i]);
 else s += c;
}