Что нужно исправить?
Требуется написать функцию, которая сравнивает первую и последнюю строку файла (с++). Не понимаю, в чем ошибка.
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
char sravnenie(char *str);
int main(){
int max = 255;
char filename[max], str[max];
cout << "Vvedite imya faila: ";
cin >> filename;
ifstream fin(filename);
if(!fin){
cout << "File error.";
return 1;
}
fin.getline(str, max, '\0');
sravnenie(str);
system("pause");
return 0;
}
char sravnenie(char *str){
int i, j;
int max = 255;
char str1[max], str2[max], str3[max];
for (i = 0; i < strlen(str); i++){
if(str[i]!='.' || str[i]!='!' || str[i]!='?'){
str1[i]+=str[i];
}
break;
}
for (i = strlen(str)-1; i > 0; i--){
if(str[i]!='.' || str[i]!='!' || str[i]!='?'){
str2[i]+=str[i];
}
break;
}
j = strlen(str);
for (i = 0; i < strlen(str); i++){
str3[i]+=str2[j-i-1];
}
if(str1 == str3) cout << "Stroki odinakovu." << endl;
else cout << "Stroki raznue." << endl;
}
Ответы (2 шт):
если у вас записано условие
если переменная не равна значение1 ИЛИ переменная не равна значение2
значит это условие будет выполняться ВСЕГДА
это касательно ваших циклов
кроме того сразу после 1 этапа делать
breakбез условия - это значит обработать лишь 1 значение цикладелать
strl[i] += str[i]без инициализации (заполнения хотя бы 0) массива - значит поиметь офигительно "предсказуемые" результатызачем вычислять отдельно
j = strlen(str)если внутри циклов все равно еще раз вычисляется, причем на каждом этапе, что очень неоптимально - надо 1 раз вычислить длину строки и ее использоватьif (str1 == str3)- это сравнение указателей, которые и так разные, т.е. проверка проходить никогда не будет, для сравнения строк используются функции, напримерstrcmpвы формируете массивы размером 255 символов, но при работе с входящей строкой нигде не проверяете на выход за пределы массивов, если я передам в функцию строку размером в 1000 символов, то ваш код полезет в другие области памяти (полез бы в святые времена когда работали уязвимости переполнения буферов, а так он просто рухнет, а может все таки полезет)
статический массив можно задать только через константный размер
такой код:
int size = 100;
char arr[size];
выдаст такую ошибку:
Error C2131 expression did not evaluate to a constant
надо использовать
const int size = 100;
Это я касательно вашей int max = 255;
А вообще код вообще не работающий
А, раз уж С++, вот так нельзя?
bool compare(const char * filename)
{
string first,last,s;
ifstream in(filename);
getline(in,first);
while(getline(in,s)) last = s;
return first == last;
}
Равны - true, нет - false. Надо добавить обработку ошибок (ну, файл не найден, в нем пусто и т.п., но идея изложена.