﻿<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Релиб / Программирование / C++  / Сравнение строк и работа с таймером / Latest Posts</title><generator>InstantForum.NET v4.1.4</generator><description>Релиб</description><link>http://www.relib.com/forums/</link><webMaster>robot@relib.com</webMaster><lastBuildDate>Sat, 06 Sep 2008 23:14:07 GMT</lastBuildDate><ttl>20</ttl><item><title>RE: Сравнение строк и работа с таймером</title><link>http://www.relib.com/forums/Topic914192-7-1.aspx</link><description>Да, с &amp; была ошибочка, но и не в ней дело. Все равно появляются непонятные символы вместо слов! Причем, если в переменную a (string a;) записать например слово "test", то printf("%s", a.c_str()); выведет это слово нормально. Так же можно спокойной объединить строки a.insert(a.length(), " testin' again..."); и printf все нормально выведет.&lt;br&gt; Это что касается a, а по поводу A[][] и B[][], в которые строковые значения считываются из файла при помощи функции fscanf(...), то тут уже все иначе. И printf уже не работает так, как с a. Чтобы например вывести A[1][1] надо писать так printf("%s", &amp;A[1][1]);.. Т.е. тут уже не работает вариант с c_str(). Никак не могу понять почему, ведь типы данных одинаковые, а работают совершенно по-разному!&lt;br&gt;&lt;br&gt; Наверное по этой самой, непонятной, причине и не получается объединять строки a и A[][] или в противном случае на выходе получается набор из нескольких непонятных символов!&lt;br&gt;&lt;br&gt; И про содержание файлов. Это текстовые файлы, в которых слова разделены табуляцией. Всего в них 6 столбцов и 3 строки (для начала).</description><pubDate>Thu, 21 Jun 2007 19:00:53 GMT</pubDate><dc:creator>blaze</dc:creator></item><item><title>RE: Сравнение строк и работа с таймером</title><link>http://www.relib.com/forums/Topic914192-7-1.aspx</link><description>printf("%s", &amp;a) - по-моему это не верно, вы передаете указатель на объект класса string и говорите printf, что это строка, безопаснее и правильнее использовать метод класса c_str(), который вы уже, судя по коду знаете: printf("%s", a.c_str())&lt;br&gt;&lt;br&gt;впрочем, проблема может быть и в другом, надо попробовать откомпилировать код, только я не представляю что лежит в файлах: file_1.txt и file_2.txt&lt;br&gt;&lt;br&gt;я бы вообще не использовал scanf и printf, а пользовался стандартными потоками ввода/вывода C++ библиотеки STL, а не функциями C, потому как последние предполагают, что они работают с массивами символов char[] / char*, а вы скармливаете им экземпляры класса string&lt;br&gt;&lt;br&gt;С уважением,&lt;br&gt;Владимир</description><pubDate>Thu, 21 Jun 2007 11:38:57 GMT</pubDate><dc:creator>boombastik</dc:creator></item><item><title>RE: Сравнение строк и работа с таймером</title><link>http://www.relib.com/forums/Topic914192-7-1.aspx</link><description>Вот выкладываю немного измененный код:&lt;br&gt;//---------------------------------------------------------------------------&lt;br&gt;#include &amp;lt;vcl.h&amp;gt;&lt;br&gt;  #include &amp;lt;stdio.h&amp;gt;&lt;br&gt;  #include &amp;lt;string&amp;gt;&lt;br&gt;  #include &amp;lt;vector&amp;gt;&lt;br&gt;  #pragma hdrstop&lt;br&gt;//---------------------------------------------------------------------------&lt;br&gt;#pragma argsused&lt;br&gt;  int main(){&lt;br&gt;  using namespace std;&lt;br&gt;  FILE *input, *output;&lt;br&gt;  string A[3][6];&lt;br&gt;  string B[3][6];&lt;br&gt;  string a;&lt;br&gt;  int i = 0;&lt;br&gt;  int j = 0;&lt;br&gt;  int f_column;&lt;br&gt;  input = fopen(&amp;quot;file_1.txt&amp;quot;, &amp;quot;r&amp;quot;);&lt;br&gt; if(input){&lt;br&gt;  while(fscanf(input, &amp;quot;%s %s %s %s %s %s&amp;quot;,&amp;amp;A[i][0],&amp;amp;A[i][1],&amp;amp;A[i][2],&amp;amp;A[i][3],&amp;amp;A[i][4],&amp;amp;A[i][5])==6){&lt;br&gt;  i++;&lt;br&gt;  }&lt;br&gt;  }else{&lt;br&gt;  printf(&amp;quot;Error while opening file 1&amp;quot;);&lt;br&gt;  }&lt;br&gt;  fclose(input);&lt;br&gt;  input = fopen(&amp;quot;file_2.txt&amp;quot;, &amp;quot;r&amp;quot;);&lt;br&gt; if(input){&lt;br&gt;  while(fscanf(input, &amp;quot;%s %s %s %s %s %s&amp;quot;,&amp;amp;B[i][0],&amp;amp;B[i][1],&amp;amp;B[i][2],&amp;amp;B[i][3],&amp;amp;B[i][4],&amp;amp;B[i][5])==6){&lt;br&gt;  i++;&lt;br&gt;  }&lt;br&gt;  }else{&lt;br&gt;  printf(&amp;quot;Error while opening file 2&amp;quot;);&lt;br&gt;  }&lt;br&gt; fclose(input);&lt;br&gt; printf(&amp;quot;Enter column number: &amp;quot;);&lt;br&gt;  scanf(&amp;quot;%i&amp;quot;, &amp;amp;f_column);&lt;br&gt; a = A[1][1]+A[1][5];&lt;br&gt;  printf(&amp;quot;%s&amp;quot;, a);&lt;br&gt; output = fopen(&amp;quot;file_3.txt&amp;quot;, &amp;quot;w&amp;quot;);&lt;br&gt; for(i=0;i&amp;lt;3;i++){&lt;br&gt;  if(strstr(A[i][f_column].c_str(), B[i][f_column].c_str())){&lt;br&gt;  for(j=0; j&amp;lt;=5;j++){&lt;br&gt;  a += A[i][j];&lt;br&gt;  a += &amp;quot;\t&amp;quot;;&lt;br&gt;  //printf(&amp;quot;%s&amp;quot;, &amp;amp;A[i][j]);&lt;br&gt;  }&lt;br&gt; for(j=0;j&amp;lt;=5;j++){&lt;br&gt;  a += B[i][j];&lt;br&gt;  a += &amp;quot;\t&amp;quot;;&lt;br&gt;  }&lt;br&gt;  a += &amp;quot;&amp;quot;;&lt;br&gt;  }&lt;br&gt;  }&lt;br&gt; fprintf(output, &amp;quot;%s&amp;quot;, &amp;amp;a);&lt;br&gt;  fclose(output);&lt;br&gt; return 0;&lt;br&gt;  }&lt;br&gt;  //-----------------------------------------------------------------------------//&lt;br&gt;</description><pubDate>Wed, 20 Jun 2007 10:19:35 GMT</pubDate><dc:creator>blaze</dc:creator></item><item><title>RE: Сравнение строк и работа с таймером</title><link>http://www.relib.com/forums/Topic914192-7-1.aspx</link><description>Строки объединить получилось, только теперь другая проблема возникла. Вместо слов, которые были в переменных, при объединении я получаю на выходе несколько каких-то непонятных символов.&lt;br&gt;Есть такие переменные:&lt;br&gt;	string A[3][6];&lt;br&gt;	string B[3][6];&lt;br&gt;	string a;&lt;br&gt;&lt;br&gt;В a я объединяю строки. Например так a = A[0][1] + B[3][1];.. printf("%s", &amp;a) выводит вместо слов, 3 символа. Если я сделаю a.insert(a.length(), A[0][1]); a.insert(a.length(), B[3][1]); то printf опять выводит 3 символа.&lt;br&gt;В чем может быть проблема?&lt;br&gt;</description><pubDate>Wed, 20 Jun 2007 10:03:05 GMT</pubDate><dc:creator>blaze</dc:creator></item><item><title>RE: Сравнение строк и работа с таймером</title><link>http://www.relib.com/forums/Topic914192-7-1.aspx</link><description>попробуй включить следующий инклуд:&lt;/P&gt;&lt;P&gt;#include &amp;lt;string&amp;gt;&lt;/P&gt;&lt;P&gt;не уверен, но возможно #include &amp;lt;string.h&amp;gt; стоит исключить&lt;/P&gt;&lt;P&gt;Удачи,&lt;BR&gt;Владимир</description><pubDate>Wed, 20 Jun 2007 02:47:24 GMT</pubDate><dc:creator>boombastik</dc:creator></item><item><title>RE: Сравнение строк и работа с таймером</title><link>http://www.relib.com/forums/Topic914192-7-1.aspx</link><description>Странно, когда я объединяю строки при помощи "+", то С++ выдает ошибку [C++ Error] Main_Unit.cpp(54): E2093 'operator+' not implemented in type 'string' for arguments of the same type</description><pubDate>Tue, 19 Jun 2007 13:37:46 GMT</pubDate><dc:creator>blaze</dc:creator></item><item><title>RE: Сравнение строк и работа с таймером</title><link>http://www.relib.com/forums/Topic914192-7-1.aspx</link><description>зачем использовать strstr если вы работаете с экземплярами класса string?&lt;br&gt;у этих объектов есть более удобные методы поиска подстроки: find, rfind, find_first_of, find_last_of и др.&lt;br&gt;&lt;br&gt;для сравнения строк представленных объектами класса string достаточно воспользоваться оператором ==&lt;br&gt;&lt;br&gt;[code]&lt;br&gt;string str1 = "aaa";&lt;br&gt;string str2 = "aaa";&lt;br&gt;if (str1 == str2)&lt;br&gt;{&lt;br&gt;    //....&lt;br&gt;}&lt;br&gt;[/code]&lt;br&gt;&lt;br&gt;С уважением,&lt;br&gt;Владимир</description><pubDate>Tue, 19 Jun 2007 13:12:13 GMT</pubDate><dc:creator>boombastik</dc:creator></item><item><title>RE: Сравнение строк и работа с таймером</title><link>http://www.relib.com/forums/Topic914192-7-1.aspx</link><description>если используются строки из STL (а судя по коду именно они и используются), то их можно соединять при помощи оператора +&lt;br&gt;&lt;br&gt;[code]&lt;br&gt;string str1 = "aaa";&lt;br&gt;string str2 = "bbb";&lt;br&gt;string str3 = str1 + str2;&lt;br&gt;[/code]&lt;br&gt;&lt;br&gt;для строковых массивов char[x] / char* используются методы strcat, strncat&lt;br&gt;&lt;br&gt;Удачи,&lt;br&gt;Владимир</description><pubDate>Tue, 19 Jun 2007 13:05:04 GMT</pubDate><dc:creator>boombastik</dc:creator></item><item><title>RE: Сравнение строк и работа с таймером</title><link>http://www.relib.com/forums/Topic914192-7-1.aspx</link><description> Разобрался с первым заданием.. Только вопрос небольшой возник.. А как объединить строки в одну?</description><pubDate>Tue, 19 Jun 2007 12:00:44 GMT</pubDate><dc:creator>blaze</dc:creator></item><item><title>Сравнение строк и работа с таймером</title><link>http://www.relib.com/forums/Topic914192-7-1.aspx</link><description>Доброе время суток!&lt;br&gt;&lt;br&gt; Есть такая задача: Пусть имеется два файла, в каждом из которых информация разбита по 6-ти столбцам, произведите соединение строк этих файлов по совпадению указанных с терминала столбцов.&lt;br&gt;&lt;br&gt; Вот так пытался ее решить (на Bouilder):&lt;br&gt;//---------------------------------------------------------------------------&lt;br&gt;#include &amp;lt;vcl.h&amp;gt;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;#include &amp;lt;string.h&amp;gt;&lt;br&gt;#include &amp;lt;vector&amp;gt;&lt;br&gt;#pragma hdrstop&lt;br&gt;//---------------------------------------------------------------------------&lt;br&gt;&lt;br&gt;#pragma argsused&lt;br&gt;main(){&lt;br&gt;	FILE *input, *output;&lt;br&gt;	using namespace std;&lt;br&gt;	string A[3][6];&lt;br&gt;	string B[3][6];&lt;br&gt;	int i = 0;&lt;br&gt;	int f_column;&lt;br&gt;	input = fopen("file_1.txt", "r");&lt;br&gt;&lt;br&gt;	if(input){&lt;br&gt;		while(fscanf(input, "%s %s %s %s %s %s",&amp;A[i][0],&amp;A[i][1],&amp;A[i][2],&amp;A[i][3],&amp;A[i][4],&amp;A[i][5])==6){&lt;br&gt;			i++;&lt;br&gt;		}&lt;br&gt;	}else{&lt;br&gt;		printf("Error while opening file 1");&lt;br&gt;	}&lt;br&gt;	fclose(input);&lt;br&gt;	input = fopen("file_2.txt", "r");&lt;br&gt;&lt;br&gt;	if(input){&lt;br&gt;		while(fscanf(input, "%s %s %s %s %s %s",&amp;B[i][0],&amp;B[i][1],&amp;B[i][2],&amp;B[i][3],&amp;B[i][4],&amp;B[i][5])==6){&lt;br&gt;			i++;&lt;br&gt;		}&lt;br&gt;	}else{&lt;br&gt;		printf("Error while opening file 2");&lt;br&gt;	}&lt;br&gt;&lt;br&gt;	fclose(input);&lt;br&gt;&lt;br&gt;	printf("Enter column number: ");&lt;br&gt;	scanf("%i", &amp;f_column);&lt;br&gt;&lt;br&gt;	output = fopen("file_3.txt", "w");&lt;br&gt;	string a, b;&lt;br&gt;	for(i=0;i&lt;=3;i++){&lt;br&gt;		a = A[i][f_column];&lt;br&gt;		b = B[i][f_column];&lt;br&gt;		if(strstr(a, b)){&lt;br&gt;			fprintf(output, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s", &amp;A[i][0], &amp;A[i][1], &amp;A[i][2], &amp;A[i][3], &amp;A[i][4], &amp;A[i][5], &amp;B[i][0], &amp;B[i][1], &amp;B[i][2], &amp;B[i][3], &amp;B[i][4], &amp;B[i][5]);&lt;br&gt;		}&lt;br&gt;	}&lt;br&gt;	fclose(output);&lt;br&gt;	//printf("Do you to exit?");&lt;br&gt;	scanf("%s", &amp;A[0][5]);&lt;br&gt;	return 0;&lt;br&gt;}&lt;br&gt;//---------------------------------------------------------------------------&lt;br&gt;&lt;br&gt; Но происходит ошибка в "if(strstr(a, b)){". Подскажите, пожалуйста, как ее решить? Если не ошибаюсь, то strstr требует char, а не string.. Или может я не прав. Если кому не трудно, предложите грамотное решение этой задачки, ведь тут в идеальном варианте нужен динамеческий массив!&lt;br&gt;&lt;br&gt; И еще есть такая задачка: Создайте программу, которая - либо&lt;br&gt;1) каждые 2 минуты, либо&lt;br&gt;2) в указанное время, либо&lt;br&gt;3) с выходом из диалогового режима терминала- будет производить добавление к счетчику введенного с терминала целого числа;&lt;br&gt;выдавайте приглашение, прибавлять число или нет, а также проверяйте, является введенное значение числом.&lt;br&gt;&lt;br&gt; Тут как-то надо создать таймер и функцию перехвата события, когда закрывают окно терминала, чего тоже не знаю. Помогите, пожалуйста, с этим!&lt;br&gt;&lt;br&gt;&lt;br&gt; Заранее премного благодарен!</description><pubDate>Tue, 19 Jun 2007 08:18:44 GMT</pubDate><dc:creator>blaze</dc:creator></item></channel></rss>