|
|
|
Supreme Being
      
участник
Last Login: 12.06.2008 11:23
Сообщ.: 96,
Visits: 535
|
|
Доброе время суток!
Есть такая задача: Пусть имеется два файла, в каждом из которых информация разбита по 6-ти столбцам, произведите соединение строк этих файлов по совпадению указанных с терминала столбцов.
Вот так пытался ее решить (на Bouilder):
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#include <string.h>
#include <vector>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
main(){
FILE *input, *output;
using namespace std;
string A[3][6];
string B[3][6];
int i = 0;
int f_column;
input = fopen("file_1.txt", "r");
if(input){
while(fscanf(input, "%s %s %s %s %s %s",&A[i][0],&A[i][1],&A[i][2],&A[i][3],&A[i][4],&A[i][5])==6){
i++;
}
}else{
printf("Error while opening file 1");
}
fclose(input);
input = fopen("file_2.txt", "r");
if(input){
while(fscanf(input, "%s %s %s %s %s %s",&B[i][0],&B[i][1],&B[i][2],&B[i][3],&B[i][4],&B[i][5])==6){
i++;
}
}else{
printf("Error while opening file 2");
}
fclose(input);
printf("Enter column number: ");
scanf("%i", &f_column);
output = fopen("file_3.txt", "w");
string a, b;
for(i=0;i<=3;i++){
a = A[i][f_column];
b = B[i][f_column];
if(strstr(a, b)){
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", &A[i][0], &A[i][1], &A[i][2], &A[i][3], &A[i][4], &A[i][5], &B[i][0], &B[i][1], &B[i][2], &B[i][3], &B[i][4], &B[i][5]);
}
}
fclose(output);
//printf("Do you to exit?");
scanf("%s", &A[0][5]);
return 0;
}
//---------------------------------------------------------------------------
Но происходит ошибка в "if(strstr(a, b)){". Подскажите, пожалуйста, как ее решить? Если не ошибаюсь, то strstr требует char, а не string.. Или может я не прав. Если кому не трудно, предложите грамотное решение этой задачки, ведь тут в идеальном варианте нужен динамеческий массив!
И еще есть такая задачка: Создайте программу, которая - либо
1) каждые 2 минуты, либо
2) в указанное время, либо
3) с выходом из диалогового режима терминала- будет производить добавление к счетчику введенного с терминала целого числа;
выдавайте приглашение, прибавлять число или нет, а также проверяйте, является введенное значение числом.
Тут как-то надо создать таймер и функцию перехвата события, когда закрывают окно терминала, чего тоже не знаю. Помогите, пожалуйста, с этим!
Заранее премного благодарен!
|
|
|
|
|
Supreme Being
      
участник
Last Login: 12.06.2008 11:23
Сообщ.: 96,
Visits: 535
|
|
| Разобрался с первым заданием.. Только вопрос небольшой возник.. А как объединить строки в одну?
|
|
|
|
|
Supreme Being
      
модератор
Last Login: 09.07.2008 2:17
Сообщ.: 1 298,
Visits: 12 500
|
|
если используются строки из STL (а судя по коду именно они и используются), то их можно соединять при помощи оператора +
string str1 = "aaa";
string str2 = "bbb";
string str3 = str1 + str2;
для строковых массивов char[x] / char* используются методы strcat, strncat
Удачи,
Владимир
|
|
|
|
|
Supreme Being
      
модератор
Last Login: 09.07.2008 2:17
Сообщ.: 1 298,
Visits: 12 500
|
|
зачем использовать strstr если вы работаете с экземплярами класса string?
у этих объектов есть более удобные методы поиска подстроки: find, rfind, find_first_of, find_last_of и др.
для сравнения строк представленных объектами класса string достаточно воспользоваться оператором ==
string str1 = "aaa";
string str2 = "aaa";
if (str1 == str2)
{
//....
}
С уважением,
Владимир
|
|
|
|
|
Supreme Being
      
участник
Last Login: 12.06.2008 11:23
Сообщ.: 96,
Visits: 535
|
|
| Странно, когда я объединяю строки при помощи "+", то С++ выдает ошибку [C++ Error] Main_Unit.cpp(54): E2093 'operator+' not implemented in type 'string' for arguments of the same type
|
|
|
|
|
Supreme Being
      
модератор
Last Login: 09.07.2008 2:17
Сообщ.: 1 298,
Visits: 12 500
|
|
| попробуй включить следующий инклуд: #include <string> не уверен, но возможно #include <string.h> стоит исключить Удачи, Владимир
|
|
|
|
|
Supreme Being
      
участник
Last Login: 12.06.2008 11:23
Сообщ.: 96,
Visits: 535
|
|
Строки объединить получилось, только теперь другая проблема возникла. Вместо слов, которые были в переменных, при объединении я получаю на выходе несколько каких-то непонятных символов.
Есть такие переменные:
string A[3][6];
string B[3][6];
string a;
В a я объединяю строки. Например так a = A[0][1] + B[3][1];.. printf("%s", &a) выводит вместо слов, 3 символа. Если я сделаю a.insert(a.length(), A[0][1]); a.insert(a.length(), B[3][1]); то printf опять выводит 3 символа.
В чем может быть проблема?
|
|
|
|
|
Supreme Being
      
участник
Last Login: 12.06.2008 11:23
Сообщ.: 96,
Visits: 535
|
|
Вот выкладываю немного измененный код:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#include <string>
#include <vector>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(){
using namespace std;
FILE *input, *output;
string A[3][6];
string B[3][6];
string a;
int i = 0;
int j = 0;
int f_column;
input = fopen("file_1.txt", "r");
if(input){
while(fscanf(input, "%s %s %s %s %s %s",&A[i][0],&A[i][1],&A[i][2],&A[i][3],&A[i][4],&A[i][5])==6){
i++;
}
}else{
printf("Error while opening file 1");
}
fclose(input);
input = fopen("file_2.txt", "r");
if(input){
while(fscanf(input, "%s %s %s %s %s %s",&B[i][0],&B[i][1],&B[i][2],&B[i][3],&B[i][4],&B[i][5])==6){
i++;
}
}else{
printf("Error while opening file 2");
}
fclose(input);
printf("Enter column number: ");
scanf("%i", &f_column);
a = A[1][1]+A[1][5];
printf("%s", a);
output = fopen("file_3.txt", "w");
for(i=0;i<3;i++){
if(strstr(A[i][f_column].c_str(), B[i][f_column].c_str())){
for(j=0; j<=5;j++){
a += A[i][j];
a += "\t";
//printf("%s", &A[i][j]);
}
for(j=0;j<=5;j++){
a += B[i][j];
a += "\t";
}
a += "";
}
}
fprintf(output, "%s", &a);
fclose(output);
return 0;
}
//-----------------------------------------------------------------------------//
|
|
|
| | |