Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Костяныч
15 / 15 / 0
Регистрация: 31.10.2010
Сообщений: 1,238
Записей в блоге: 2
#1

Проверка содержимого char[] - C++

30.08.2013, 12:15. Просмотров 741. Ответов 13
Метки нет (Все метки)

Добрый день.
Написал чат по сети. В переменную char buf[1024] записываются приходящие сообщения следующим образом
C++
1
recv(client_sockfd, buf, 1024, 0);
затем я могу выводить их на экран
C++
1
printf("%s\n", buf);
.
Возникла необходимость сделать условие на содержимое переменной buf. Т.е. нечто такое
C++
1
 if (buf == 'f') printf("Hello\n");
подскажите пожалуйста, как проверить переменную buf, пришла ли только одна буква f ?
Спасибо за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2013, 12:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка содержимого char[] (C++):

Проверка содержимого массива - C++
Допустим если есть массив char array = { '_' '_' '_' '_' '_' '_' '_' '_' '_' '_' '_'} // и тд.. Как проверить если 1==2==3 элемент...

Проверка содержимого текстового файла - C++
Помогите пожалуйста сделать проверку содержимого текстового файла. Если там есть хотя бы одна не цифра -выдать ошибку , если все цифры...

Проверка содержимого string/TextBox - C++
Доброго времени суток! Имеется строка TextBox, которую я перевожу в string, дабы затем поместить в переменную типа int, однако в случае...

Проверка содержимого текстового файла - C++
Помоги проверить содержимое файла на числа !Сделал вот как я думаюbool lch(string FN) { ifstream F1(FN, ios::in); char ch; ...

Проверка конца строки и переменной char. - C++
Не когда не приходилась работать со строами. Прошу помощи как определить конец строки?

Проверка ошибок в кодах. (Строки и char) - C++
Добрый день! Уж не знаю насколько я правильно поняла это задание но вот код и прошу помощи в проверке или указания алгоритма. Или указания...

13
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
30.08.2013, 12:17 #2
C++
1
if (buf[0] == 'f') printf("Hello\n");
1
Martovskij
99 / 39 / 7
Регистрация: 30.01.2011
Сообщений: 129
Завершенные тесты: 4
30.08.2013, 12:30 #3
C++
1
2
3
4
5
6
7
8
9
for(int i = 0; i < bufLen; i++)
{
  if(buf[i]=='f')
  {
      printf("hi,jack\n");
      break;
  }
 
}
1
Костяныч
15 / 15 / 0
Регистрация: 31.10.2010
Сообщений: 1,238
Записей в блоге: 2
30.08.2013, 12:38  [ТС] #4
проблема решена
0
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
30.08.2013, 12:41 #5
Костяныч, проблема-то решена.... вот только правильно ли решена?

У тебя какой транспортный протокол используется для обмена сообщениями? Подозреваю, что TCP, так?
0
AlexCore
2 / 2 / 0
Регистрация: 28.08.2013
Сообщений: 26
30.08.2013, 12:58 #6
Разве сначала не лучше получать размер строки(buf`), и по этому размеру уже смотреть, какая длина? или я не правильно понял вопрос...или Вам просто подсчет элементов нужно сделать, встречается ли он еще?
0
Костяныч
15 / 15 / 0
Регистрация: 31.10.2010
Сообщений: 1,238
Записей в блоге: 2
30.08.2013, 13:04  [ТС] #7
TCP
0
Martovskij
99 / 39 / 7
Регистрация: 30.01.2011
Сообщений: 129
Завершенные тесты: 4
30.08.2013, 13:05 #8
не лучше. в буфере может быть две строки. или три строки
0
Костяныч
15 / 15 / 0
Регистрация: 31.10.2010
Сообщений: 1,238
Записей в блоге: 2
30.08.2013, 13:06  [ТС] #9
Цитата Сообщение от AlexCore Посмотреть сообщение
Разве сначала не лучше получать размер строки(buf`), и по этому размеру уже смотреть, какая длина? или я не правильно понял вопрос...или Вам просто подсчет элементов нужно сделать, встречается ли он еще?
Если пришла просто буква f, то выполнить условие, иначе ('ff' или 'fg...' или 'dfsd f df' или 'sfg' не важно) ничего
0
AlexCore
2 / 2 / 0
Регистрация: 28.08.2013
Сообщений: 26
30.08.2013, 13:29 #10
Цитата Сообщение от Martovskij Посмотреть сообщение
не лучше. в буфере может быть две строки. или три строки
Переменная char buf[1024], не понимаю, что значит две или три строчки, перед каждой посылкой (перед каждой строчкой) мы будем указывать ее размер...извините если Вам не понял(

Добавлено через 7 минут
Цитата Сообщение от Костяныч Посмотреть сообщение
Если пришла просто буква f, то выполнить условие, иначе ('ff' или 'fg...' или 'dfsd f df' или 'sfg' не важно) ничего
Ну тогда как то так, если не так, надеюсь, меня поправят.

C++
1
2
3
4
5
6
7
8
9
10
11
12
int count = 0;
if(buf[0] == 'f'){
    ++count;
 
    for(size_t i = 1;i < size && count < 2; ++i)
        if(buf[i] == 'f')
            ++count;
 
    if(count == 1){
        //действие
    }
}
0
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
30.08.2013, 13:35 #11
О-ля-ля! Ну, раз в ходу TCP......
Костяныч, а учел ли ты, что TCP ничего не знает ни о "сообщениях", ни о "строках"? Грубо говоря, если на передающем конце в TCP сокет запихивать строки:
В лесу родилась елочка,
В лесу она росла,
Зимой и летом стройная
Зеленая была.

то на приемном конце ты лехко можешь извлечь из сокета куски:
В
ле
су родилась елочка,В лесу о
на росла,З
имой и летом стройнаяЗеле
ная б
ы
л
а.

?
0
Martovskij
99 / 39 / 7
Регистрация: 30.01.2011
Сообщений: 129
Завершенные тесты: 4
30.08.2013, 13:42 #12
Цитата Сообщение от CheshireCat Посмотреть сообщение
О-ля-ля! Ну, раз в ходу TCP......
Костяныч, а учел ли ты, что TCP ничего не знает ни о "сообщениях", ни о "строках"? Грубо говоря, если на передающем конце в TCP сокет запихивать строки:
В лесу родилась елочка,
В лесу она росла,
Зимой и летом стройная
Зеленая была.

то на приемном конце ты лехко можешь извлечь из сокета куски:
В
ле
су родилась елочка,В лесу о
на росла,З
имой и летом стройнаяЗеле
ная б
ы
л
а.

?
AlexCore, поняли?
Еще от себя добавлю, что если ТС не встречал такого, то это не значит, что такой проблемы не существует.
Причины могут быть разные, например буфер передачи больше, чем TCP MTU.
Эх... как же хорошо на java или c#, натравил BufferedReader и BufferedWriter на сокет и радуешься
1
AlexCore
2 / 2 / 0
Регистрация: 28.08.2013
Сообщений: 26
30.08.2013, 14:42 #13
Цитата Сообщение от Martovskij Посмотреть сообщение
AlexCore, поняли?
Теперь понял, спасибо. Оказывается они могут слипнуться или наоборот...ну тогда нужно к какому то формату приводить, упаковывать. Что-то типа pickle на Python`e, на плюсах ничего такого не знаю(
0
Костяныч
15 / 15 / 0
Регистрация: 31.10.2010
Сообщений: 1,238
Записей в блоге: 2
30.08.2013, 16:06  [ТС] #14
Мужики, сервер, написанный на С++ (стоит на linux) принимает сообщения, мне нудно проверять всего одну букву, и ничего более. Клиентская часть написана на C#. Клиент может посылать только f, b,r, l и s. Думаю путаницы в этом не возникнет если читать так : buf[0];
Потом буду слова проверять, но это потом...
0
30.08.2013, 16:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2013, 16:06
Привет! Вот еще темы с ответами:

Проверка массива char на равенство с таким же массивом - C++
#include &lt;iostream&gt; using namespace std; int main() { char chArr={&quot;4 8&quot;}; char chCode={&quot;4 8&quot;}; if (chCode==chArr)...

(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& - C++
astxx::manager::connection::connection(std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, unsigned short); ...

Error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' - C++
error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' void crpost(const statep &amp;struc1) { ...

Ошибка в cannot convert char * to char вроде поправил теперь выводит ересь( - C++
Всем доброго дня! У меня такая проблемка.... написал программу, но сначала она ругалась на Cannot convert char* to char теперь вроде...


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

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

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