Russian Qt Forum

Qt => Общие вопросы => Тема начата: sobre от Сентябрь 10, 2009, 22:18



Название: Поиск символа с конца заданной строки
Отправлено: sobre от Сентябрь 10, 2009, 22:18
Поиск символа с конца заданной строки
как реализовать?


Название: Re: Поиск символа с конца заданной строки
Отправлено: sobre от Сентябрь 10, 2009, 22:24
точнее как узнать последний символ в строке?


Название: Re: Поиск символа с конца заданной строки
Отправлено: spectre71 от Сентябрь 10, 2009, 22:24
Поиск символа с конца заданной строки
как реализовать?
По циклу с конца строки :)


Название: Re: Поиск символа с конца заданной строки
Отправлено: BaltikS от Сентябрь 10, 2009, 22:24
QString::lastIndexOf


Название: Re: Поиск символа с конца заданной строки
Отправлено: BaltikS от Сентябрь 10, 2009, 22:25
QString::right ( 1 )


Название: Re: Поиск символа с конца заданной строки
Отправлено: sobre от Сентябрь 10, 2009, 22:32
char *str;                                 
str=new char[255];       
FILE * PP1;
int priznak2=0;
   PP1=fopen("/etc/sysconfig/network-scripts/./ifcfg-eth0","r");
   if (PP1)
   {
      while (fgets(str,255,PP1)!=0)
      {
      if (strstr(str,"IPADDR=")>0) //(нашел нужную строку и перешел к её началу)
                что тут писать?) //(надо узнать последний символ)
       priznak2 = 1;
    }
    fclose(PP1);
   }


Название: Re: Поиск символа с конца заданной строки
Отправлено: SABROG от Сентябрь 10, 2009, 22:34
Кажется Qt тут не к месту, всё какое-то Сишное.


Название: Re: Поиск символа с конца заданной строки
Отправлено: sobre от Сентябрь 10, 2009, 22:48
да ет кусочек маленький над дописать


Название: Re: Поиск символа с конца заданной строки
Отправлено: spectre71 от Сентябрь 10, 2009, 23:00
да ет кусочек маленький над дописать
Именно то, что тебе нужно, то и напиши!
Это форум по QT, а не сайт по удаленному обучению языку "C".
Читай книжки!

int len  = strlen(str);
char ch;
if(len) {
  ch = str[len-1];
}


Название: Re: Поиск символа с конца заданной строки
Отправлено: ufna от Сентябрь 10, 2009, 23:11
может быть автор спрашивал о QString::lastIndexOf(...) ?


Название: Re: Поиск символа с конца заданной строки
Отправлено: sobre от Сентябрь 10, 2009, 23:12
конкретно мне нужно сделать: в зависимости от последней цифры выставлялся нужный признак
Код:
PP1=fopen("/etc/sysconfig/network-scripts/./ifcfg-eth0","r");
if (PP1)
{
while (fgets(str,255,PP1)!=0)
{
if (strstr(str,"IPADDR=")>0)
(str.endsWith(".250"))
   priznak2 = 1;
if (strstr(str,"IPADDR=")>0)
(str.endsWith(".251"))
   priznak2 = 2;
if (strstr(str,"IPADDR=")>0)
(str.endsWith(".252"))
   priznak2 = 3;
if (strstr(str,"IPADDR=")>0)
(str.endsWith(".253"))
   priznak2 = 4;
    }
    fclose(PP1);
}
if (priznak2 == 1)
{
PP2=fopen("/etc/sysconfig/network-scripts/./ifcfg-eth0","w");
if (PP2)
{
   fputs("DEVICE=eth0\n",PP2);
   fputs("IPADDR=1.1.1.1\n",PP2);
   fputs("NETMASK=255.255.255.0\n",PP2);
   fputs("ONBOOT=yes\n",PP2);
   fclose(PP2);
}
}

else if (priznak2 == 2)
{
PP2=fopen("/etc/sysconfig/network-scripts/./ifcfg-eth0","w");
if (PP2)
{
   fputs("DEVICE=eth0\n",PP2);
   fputs("IPADDR=1.1.1.2\n",PP2);
   fputs("NETMASK=255.255.255.0\n",PP2);
   fputs("ONBOOT=yes\n",PP2);
   fclose(PP2);
}
}
else if(priznak2 == 3)
{
PP2=fopen("/etc/sysconfig/network-scripts/./ifcfg-eth0","w");
if (PP2)
{
   fputs("DEVICE=eth0\n",PP2);
   fputs("IPADDR=1.1.1.3\n",PP2);
   fputs("NETMASK=255.255.255.0\n",PP2);
   fputs("ONBOOT=yes\n",PP2);
   fclose(PP2);
}
}
else if(priznak2 == 4)
{
PP2=fopen("/etc/sysconfig/network-scripts/./ifcfg-eth0","w");
if (PP2)
{
   fputs("DEVICE=eth0\n",PP2);
   fputs("IPADDR=1.1.1.4\n",PP2);
   fputs("NETMASK=255.255.255.0\n",PP2);
   fputs("ONBOOT=yes\n",PP2);
   fclose(PP2);
}
}
вот так пойдет?


Название: Re: Поиск символа с конца заданной строки
Отправлено: spectre71 от Сентябрь 10, 2009, 23:44
конкретно мне нужно сделать: в зависимости от последней цифры выставлялся нужный признак
...
вот так пойдет?
- Ты хоть понимаешь разницу между цифрой, числом и подстрокой?
- Что это такое?
Цитировать
if (strstr(str,"IPADDR=")>0) (str.endsWith(".250"))
Ты на чем пишешь, какие библиотеки используешь, какого типа у тебя str
-
Цитировать
{
      if (strstr(str,"IPADDR=")>0)
      (str.endsWith(".250"))
       priznak2 = 1;
      if (strstr(str,"IPADDR=")>0)
      (str.endsWith(".251"))
       priznak2 = 2;
      if (strstr(str,"IPADDR=")>0)
      (str.endsWith(".252"))
       priznak2 = 3;
      if (strstr(str,"IPADDR=")>0)
      (str.endsWith(".253"))
       priznak2 = 4;
    }
Что это за ерунда, на каком языке написано, уж точно не на "C" или "C++"


Название: Re: Поиск символа с конца заданной строки
Отправлено: sobre от Сентябрь 11, 2009, 00:12
Вот код который должен прочитав файл ifcfg-eth0 найти строку с началом вида IPADDR= и выполнить проверку на конец строки.
Если конец строки .250 то присвоить переменной priznak2 единицу, если .251 присвоить 2, если .252 присвоить 3, если .253 присвоить 4.
В зависимости от значения переменной priznak2 записать в этот файл нужную информацию.

Код:
char *str;                                 
str=new char[255];       
FILE * PP1;
int priznak2=0;
PP1=fopen("/etc/sysconfig/network-scripts/./ifcfg-eth0","r");
if (PP1)
{
while (fgets(str,255,PP1)!=0)
{
if (strstr(str,"IPADDR=")>0)
(str.endsWith(".250"))
    priznak2 = 1;
if (strstr(str,"IPADDR=")>0)
(str.endsWith(".251"))
    priznak2 = 2;
if (strstr(str,"IPADDR=")>0)
(str.endsWith(".252"))
    priznak2 = 3;
if (strstr(str,"IPADDR=")>0)
(str.endsWith(".253"))
    priznak2 = 4;
    }
    fclose(PP1);
}
if (priznak2 == 1)
{
PP2=fopen("/etc/sysconfig/network-scripts/./ifcfg-eth0","w");
if (PP2)
{
    fputs("DEVICE=eth0\n",PP2);
    fputs("IPADDR=1.1.1.1\n",PP2);
    fputs("NETMASK=255.255.255.0\n",PP2);
    fputs("ONBOOT=yes\n",PP2);
    fclose(PP2);
}
}

else if (priznak2 == 2)
{
PP2=fopen("/etc/sysconfig/network-scripts/./ifcfg-eth0","w");
if (PP2)
{
    fputs("DEVICE=eth0\n",PP2);
    fputs("IPADDR=1.1.1.2\n",PP2);
    fputs("NETMASK=255.255.255.0\n",PP2);
    fputs("ONBOOT=yes\n",PP2);
    fclose(PP2);
}
}
else if(priznak2 == 3)
{
PP2=fopen("/etc/sysconfig/network-scripts/./ifcfg-eth0","w");
if (PP2)
{
    fputs("DEVICE=eth0\n",PP2);
    fputs("IPADDR=1.1.1.3\n",PP2);
    fputs("NETMASK=255.255.255.0\n",PP2);
    fputs("ONBOOT=yes\n",PP2);
    fclose(PP2);
}
}
else if(priznak2 == 4)
{
PP2=fopen("/etc/sysconfig/network-scripts/./ifcfg-eth0","w");
if (PP2)
{
    fputs("DEVICE=eth0\n",PP2);
    fputs("IPADDR=1.1.1.4\n",PP2);
    fputs("NETMASK=255.255.255.0\n",PP2);
    fputs("ONBOOT=yes\n",PP2);
    fclose(PP2);
}
}
правильно ли я реализовал?

зы Основная прога написана на qt


Название: Re: Поиск символа с конца заданной строки
Отправлено: spectre71 от Сентябрь 11, 2009, 00:34
правильно ли я реализовал?
Нет! Это даже не скомпилиться, чего ты даже не попробовал!
Не обижайся, но это бред.
Учи язык, почитай книжки по "C/C++". Обратись за помощью к сокурсникам, если трудно разобраться самому.


Название: Re: Поиск символа с конца заданной строки
Отправлено: sobre от Сентябрь 11, 2009, 00:36
сори, нужно было еще в первом посте написать что первый раз вижу исходный код и разбираюсь.
прошу помощи ибо на работе программист в отпуске а реализовать оч надо


Название: Re: Поиск символа с конца заданной строки
Отправлено: Vexator от Сентябрь 11, 2009, 03:04
Я чего то не совсем понял, но что мешает использовать тогда Qt-шный классы QString ?
там уже весь нужный тебе функционал есть, о чем уже говорили
lastIndexOf(), который сам за тебя всю работу и сделает, почитай немного асситент.
твой код можно ужать буквально до пары строк :)

что то вроде

Код
C++ (Qt)
#include <QString>
#include <QFile>
 
int func(QString path)
{
int i;
QString str;
 
QFile f(path);
if (!f.exists()) return 0;
f.open(QIODevice::ReadOnly);
while (!f.atEnd())
{
     str = f.readLine();
     if (f.contains("IPADDR=")
     {
           i = str.right(3).toInt();
           switch(i)
           {
           case 250:
           return 1;
           case 251:
           return 2;
           case 252:
          //--------- ну и так все варианты :) ------ можно еще попробовать вообще возвращать
          //--------- 250-(250+1) и возвращать результат вычитания )))
          default:
          qWarning("хрень :)");
           }
     }
}
// нехрена мы не нашли ((
return 0;
}
 
вот чего то такое )
эта функция тебе вернет чего те надо :)

p.s. может кто из гуру написать красивее? ) хочу посмотреть наиболее оптимальный вариант решения :)