Автор Тема: Сравняване на низове в С++  (Прочетена 3570 пъти)

v_badev

  • Напреднали
  • *****
  • Публикации: 1355
    • Профил
Сравняване на низове в С++
« Отговор #15 -: Aug 15, 2007, 14:22 »
в съвременните версии на Pascal (Object Pascal след версия 3) стринга пак може да е колкото си искаш голям, и не можеш с просто присвояване да омажеш стека.

@Nikolavp Точно за да си нямаш проблеми с като този който си демонстрирал е хубаво да ползваш класа string когато работиш с входно-изходната библиотека на C++. Ако искаш да ползваш указатели към char по-добре ползвай scanf и изрично му указвай колко байта да чете. В твоят пример четенето ще стане така:
Примерен код
#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
        /*инициализиране на елементите на масива с 0*/
        char hello[3] = {0};
        scanf("%2c", hello);
        cout << hello << endl;
}

Друг е въпроса че това вече не прилича кой-знае колко на програма на C++.
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Сравняване на низове в С++
« Отговор #16 -: Aug 15, 2007, 15:49 »
Мммм има по-забавен начин да не се тормозиш за дължината на това, което се въвежда. Ето така:

Цитат


char *str;
...
scanf("%as",&str);



По този начин, scanf() заделя автоматично памет в зависимост от дължината на въведеният низ. Единствената грижа е после тази памет да се освободи c free().



Активен

"Knowledge is power" - France is Bacon

Nikolavp

  • Напреднали
  • *****
  • Публикации: 408
    • Профил
    • WWW
Сравняване на низове в С++
« Отговор #17 -: Aug 15, 2007, 18:40 »
Цитат (v_badev @ Авг. 15 2007,15:22)
в съвременните версии на Pascal (Object Pascal след версия 3) стринга пак може да е колкото си искаш голям, и не можеш с просто присвояване да омажеш стека.

@Nikolavp Точно за да си нямаш проблеми с като този който си демонстрирал е хубаво да ползваш класа string когато работиш с входно-изходната библиотека на C++. Ако искаш да ползваш указатели към char по-добре ползвай scanf и изрично му указвай колко байта да чете. В твоят пример четенето ще стане така:
Примерен код
#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
        /*инициализиране на елементите на масива с 0*/
        char hello[3] = {0};
        scanf("%2c", hello);
        cout << hello << endl;
}

Друг е въпроса че това вече не прилича кой-знае колко на програма на C++.

Всъщност точно затова говорехме и аз го намекнах/показах в ползва на класа стринг, защото the_real_maniac предложи на пича да ползва низове, вместо класа в C++. Със scanf не съм много запознат, защото не съм се занимавал с чисто С.
Активен

http://blog-nikolavp.rhcloud.com - простотиите, с които се занимавам в свободното време