Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Костяныч
16 / 16 / 4
Регистрация: 31.10.2010
Сообщений: 1,238
Записей в блоге: 2
#1

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

30.08.2013, 12:15. Просмотров 843. Ответов 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 ?
Спасибо за помощь!
http://www.cyberforum.ru/cpp-beginners/thread974807.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2013, 12:15
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Проверка содержимого char[] (C++):

Проверка содержимого текстового файла
Помоги проверить содержимое файла на числа !Сделал вот как я думаюbool...

Проверка содержимого текстового файла
Помогите пожалуйста сделать проверку содержимого текстового файла. Если там...

Проверка содержимого string/TextBox
Доброго времени суток! Имеется строка TextBox, которую я перевожу в string,...

Int из char[] проверка
Здравствуйте. Можно ли как нибудь проверит влезет ли char, например...

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

13
CheshireCat
Эксперт С++
2907 / 1256 / 114
Регистрация: 27.05.2008
Сообщений: 3,451
30.08.2013, 12:17 #2
C++
1
if (buf[0] == 'f') printf("Hello\n");
1
Martovskij
99 / 39 / 12
Регистрация: 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
Костяныч
16 / 16 / 4
Регистрация: 31.10.2010
Сообщений: 1,238
Записей в блоге: 2
30.08.2013, 12:38  [ТС] #4
проблема решена
0
CheshireCat
Эксперт С++
2907 / 1256 / 114
Регистрация: 27.05.2008
Сообщений: 3,451
30.08.2013, 12:41 #5
Костяныч, проблема-то решена.... вот только правильно ли решена?

У тебя какой транспортный протокол используется для обмена сообщениями? Подозреваю, что TCP, так?
0
AlexCore
2 / 2 / 2
Регистрация: 28.08.2013
Сообщений: 26
30.08.2013, 12:58 #6
Разве сначала не лучше получать размер строки(buf`), и по этому размеру уже смотреть, какая длина? или я не правильно понял вопрос...или Вам просто подсчет элементов нужно сделать, встречается ли он еще?
0
Костяныч
16 / 16 / 4
Регистрация: 31.10.2010
Сообщений: 1,238
Записей в блоге: 2
30.08.2013, 13:04  [ТС] #7
TCP
0
Martovskij
99 / 39 / 12
Регистрация: 30.01.2011
Сообщений: 129
Завершенные тесты: 4
30.08.2013, 13:05 #8
не лучше. в буфере может быть две строки. или три строки
0
Костяныч
16 / 16 / 4
Регистрация: 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 / 2
Регистрация: 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
Эксперт С++
2907 / 1256 / 114
Регистрация: 27.05.2008
Сообщений: 3,451
30.08.2013, 13:35 #11
О-ля-ля! Ну, раз в ходу TCP......
Костяныч, а учел ли ты, что TCP ничего не знает ни о "сообщениях", ни о "строках"? Грубо говоря, если на передающем конце в TCP сокет запихивать строки:
В лесу родилась елочка,
В лесу она росла,
Зимой и летом стройная
Зеленая была.

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

?
0
Martovskij
99 / 39 / 12
Регистрация: 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 / 2
Регистрация: 28.08.2013
Сообщений: 26
30.08.2013, 14:42 #13
Цитата Сообщение от Martovskij Посмотреть сообщение
AlexCore, поняли?
Теперь понял, спасибо. Оказывается они могут слипнуться или наоборот...ну тогда нужно к какому то формату приводить, упаковывать. Что-то типа pickle на Python`e, на плюсах ничего такого не знаю(
0
Костяныч
16 / 16 / 4
Регистрация: 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.
Не когда не приходилась работать со строами. Прошу помощи как определить конец...

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

Char unsigned char signed char длинна Кааак
Здравствуйте. char l = {0,0}; l = 0xff; Почему, меня, компилятор...

Ошибка: "char *concat(char *,.)": невозможно преобразовать аргумент 1 из "const char [4]" в "char *"
делал задание, но на строке 36 строке пишет, что &quot;char *concat(char *,...)&quot;:...


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

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

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