Вопрос: Как сравнить две строки на языке программирования C?

 

Уроки C++ / #10 урок Строки и символы

Видео взято с канала: All For All


 

Программирование на Си урок 30: Функции ввода и вывода строк в языке Си

Видео взято с канала: From LAMER to Programmer


 

Программирование на С++. Урок 44. Поиск символа в строке

Видео взято с канала: Максим Волков


 

Основа Си. Советы по изучению программирования. String | Live

Видео взято с канала: Winderton


 

Язык Си(С). Ввод строки с консоли, вывод, сравнение строк.

Видео взято с канала: ElementaL


 

Программирование на Си. #17. Строки. Часть 1.

Видео взято с канала: Gena ANTG


 

Строки в с++. Нуль терминатор. Что такое строка в с++. char c++ массив. С++ Для начинающих. Урок #60

Видео взято с канала: #SimpleCode


37 комментариев

  • Хотя чувак я тебя понимаю)) когда чувак начинае сразу с javascript, он конечно ниче не рубит. но блин я если пишу уже на Java какие мои шансы повлиять етить на компилятор))) есть конечно но…. черт большинство что ты говоришь действительно нафиг не нужно, хотя я чую что за тем что ты говоришь стоит какая то большая идея….

  • Не замотивировал. Зачем учить с++ в 2019? Чтобы переписывать существующие оптимальные API решения? Только не надо лить воду про скорость программ, управление памятью и прочее давно известное всем отличие с++ от языков более высокого уровня (java, c#, php).

  • Дмитрий, Вы же прибавляете к D большому 32 и получаете d маленькое. Это значит что числовой код строчных символов больше, чем числовой код заглавных. В итоге получается начинать цикл нужно от А большое, до z маленькое. Чтобы наглядно продемонстрировать как интерпретируются символы, обычно показывают таблицу ASCII. Пишу не с целью покритиковать, а чтобы люди не сидели с глазами на лоб и немым «как так» и граненым стаканом в руке.

  • спасибо за урок =) все что я понял)

    int main(void)
    {
    const char* sity[3] = { «Ubuntu», «Mark Shuttleworth», «Fri-Steyt»};
    char alfa[3] = { ‘a’, ‘b’, ‘c’ };
    printf(«.
    .%c%p %s.
    «, alfa[0], &sity[0], sity[0]);
    printf(«.
    .%c%p %s.
    «, alfa[1], &sity[1], sity[1]);
    printf(«.
    .%c%p %s.
    «, alfa[2], &sity[2], sity[2]);
    printf(«-.
    «);
    return 0;
    }

  • Интересно почему когда при вводе массива char ввести больше одного пробела, то программа перестает нормально работать.
    И вообще чтобы ввести нормальную строчку из нескольких слов разделенных пробелами необходимо создать несколько массивов, которые автоматически заканчиваются когда вводишь пробел и начинается ввод нового. Почему в массив не записываются пробелы? Для ввода массива использовал cin.

  • Когда я первый раз написал свой сканер памяти, точнее стэка(небольшая приложуха строк на 20, которая выводит на консоль два столбика: первый это адрес ячейки, второй это её содержимое) я подумал:»Огооо! Ни чо себе! Вот я могу! Вот я даю!»
    Но потом жизнь дала мне пощёчину в виде:
    «Segmentation fault, bitch!»
    И я понял, что нихрена не могу и ни хрена не знаю.

  • Или нужно ли мне переписывать нампример класс Collections в JAVA и как моя программа будет совметсима со сторнними библиотеками)) да епрст, да ты можешь написать на си все то угодно но сколько ты на это потратишь времени?))) в одиночку))

  • Красиво конечно обсирает джаву и питон мол эти языки вообще не думают о ресурсах и т.д. но вся ирони в том, что то в чем ты варишься С и С++ не имеет низкого порога вхождения нужно прилично в этом разбираться и прилично времени вбахать и путь по факту только в гейм дев и не более все остальное редко пишется на этих языках.

    На питоне же можно зачастую в 99% случаев написать нужную тебе программу для заказчика на ява та же история на С# та же история. И так как 99% заказов это заказы которые нужно быстро сделать то и высокоуровневые языки программирования само собой имеют больше спрос и ниже порог вхождения.

    Так что мысли таковы сначала питон/джава/сишарп делаешь приложения для десктопа делаешь веб наброски какие то та же джанго у питона выбираешь где будешь сейчас работать и работаешь, А ПОТОМ пока работаешь и достиг хотя бы мидла начинаешь на досуге СИ и делаешь уже на нем приложения и изучаешь его если все таки появится желание разобраться более подробно в том как написать идеально приложения.

    Быстрая разработка в 21 веке занимает 99% рынка. Только большие компании с большими софтинами мощными требуют СИ программистов и обычно далеко не джунов, а хотя бы мидлов и выше.

  • Выпал в голос на:
    length =
    12hello, worldhello, world
    И далее слова: вот смотрите, прекрасно всё работает, вот:D. Думаю, раз заметил, что не туда перенос строки поставил, почему бы его не поставить куда нужно. Это так, мысли в слух, меня в блэк лист (простите, что по-английски) не нужно заносить.

  • Я учил си, и я не понимаю как это дает мне понимать такие вещи как шаблоны банды 4х и зачем они были придуманы))) все что ты говорил первые 50 минут, я знаю, ну и?

    Все равно что бы создать с этим, эээ супер кодом на с, надо тратить дох и более времени, что бы написать например окно, или задидайнить оконный интерфейс, это же сума сойти

  • Чувак, а если я вообще не шарю в программировании? Ну то бишь я понятия не имею как и что устроено? Ты можешь как то дать фундамент и дальше дать видение всей картины и необходимых знаний? Просмотрел около десятки твоих видосов, и понял что такой ментор мне скорее всего и нужен, вот только хочу знать, можешь ли ты обучить человека прям нулевого?

  • char symbol = ‘A’;

    for(; symbol <= 'Z'; symbol++)
    {

    fprintf( stdout, «%c», symbol);

    }

    printf(«.
    «);

    char symbol_a = ‘A’;

    for(; symbol_a <= 'Z'; symbol_a++)
    {

    fprintf( stdout, «%c», symbol_a+32);

    }

    Выведется ряд заглавных, а под ним ряд маленьких. И большое вам спасибо за понятные объяснения!!

  • Кто может проверить, правильно ли я понял эту строчку?
    memcpy(string->data + left->length, right->data, right->length);
    + left->length этим действием мы сдвигаемся в область, где память не заполнена?

  • Спасибо автору, очень подробно и качественно предоставлен материал!
    Первое что заинтересовало меня в уроках так это разбор тем работы с указателями. В целом все понятно, но никак не могу понять как можно выражениями доказать, что
    char * hello3 эквивалентно char hello3[].
    И почему указатель на строку char * hello3 = «Hello3» инициализируется значанием строки??? Переменная типа указатель должна же хранить значение адреса памяти, например 0х34ff1122 и т.п.?!
    Мысль навеяна примером работы с указателями на int, тут все прозрачно:
    int a = 5; // Переменная
    int * p = &a // Адрес переменной
    Данный момент со строками можно как-нибудь понять или проще на веру принять?!:)

  • Надо было на любом яп подключить библу селениума, написать локатор к никам комментаторов(например xpath) забрать значения из элементов, положить в любую коллекцию для уникальных элементов(например set в джаве) и из неё уже рандомно выбрать, инженер блять

  • Win это High Level Engenineering. хэйтеры, упрощальщики и плебс идут лесОМ! А мир вообще очень сложно устроен. Главый Архитектор постарался на Славу. Чего только стоит например сама тушка человека. Что касается подачи материала/темы, по мне так как раз этого и не хватает. Туториалов уже пруд пруди.

  • Блин или как там на git, организовать CI/CD хихихи или там скрестить ужа с носорогом, типо не знаю как работать с Maven? блин за меня уже все придумали, и мне уже приходится работать с тем что уже придуманно, мне сцуко тут надо понять зачем они это придумали, и че у них было в голове когда они это придумывали)))

  • Здравствуйте Геннадий!Такая таблица сойдет?Можно было и по другому в принципе сделать,но мне так удобнее было

    #include
    #define SIZE 8int main (void)
    {
     const char * moscow = «Moscow»;
     const char * newyork = «New-York»;
     const char * london = «London»;
     const char * minsk = «minsk»;
     const char * kiev = «Kiev»;
     const char * berlin = «Berlin»;
     const char * tokyo = «Tokyo»;
     const char * hongkong= «Hong-Kong»; float numcitys[SIZE] = {11920000.0,8406000.0,8670000.0,1893000.0,
      2804000.0,3502000.0,13620000.0,7188000.0};
      printf(«%-10s = %.0f People..
    «,moscow,numcitys[0] );
      printf(«%-10s = %.0f People..
    «,newyork,numcitys[1] );
      printf(«%-10s = %.0f People..
    «,london,numcitys[2] );
      printf(«%-10s = %.0f People..
    «,minsk,numcitys[3] );
      printf(«%-10s = %.0f People..
    «,kiev,numcitys[4] );
      printf(«%-10s = %.0f People..
    «,berlin,numcitys[5] );
      printf(«%-10s = %.0f People..
    «,tokyo,numcitys[6] );
      printf(«%-10s = %.0f People..
    «,hongkong,numcitys[7] );  printf(«.
    =
    «);
      printf(«.
    IN DESCENDING ORDER:
    «);  printf(«%-10s = %.0f People..
    «,tokyo,numcitys[6] );
      printf(«%-10s = %.0f People..
    «,moscow,numcitys[0] );
      printf(«%-10s = %.0f People..
    «,london,numcitys[2] );
      printf(«%-10s = %.0f People..
    «,newyork,numcitys[1] );
      printf(«%-10s = %.0f People..
    «,hongkong,numcitys[7] );
      printf(«%-10s = %.0f People..
    «,berlin,numcitys[5] );
      printf(«%-10s = %.0f People..
    «,kiev,numcitys[4] );
      printf(«%-10s = %.0f People..
    «,minsk,numcitys[3] );  return 0;
    }

  • НЕТ,записывай больше содержания,лекций!Говори больше непонятных слов чтобы я искал из желания понимать ТО что ты говоришь и чтобы я становился умнее!!Вноси больше ясности в структуру IT.Больше поясняй,у тебя очень круто получается!!!

    Но про языки ты не совсем прав!!!При изучении ЛЮБОГО языка вносятся куча понимания в копилку

  • у меня вопрос, каким образом можно создать строку, а уже потом инициализировать ее, как мы это делали с переменными.
    например.
    int a;
    a = 15;
    не так char string[ ];
    string = «Hello World»;
    и не так не получается
    char string[];
    string[] = «Hello World»;

  • кстати, всвязи с лютым хейтом СТЛ си++ от тебя возникает вопрос подстановки своего аллокатора в СТЛ типы и алгоритмы разрешает ту их убогость (как ты утверждаешь)? Ведь, основной хейт от тебя базируется на том, что они убого размещают данные в памяти.
    просто как то странно звучит хейт творчества одних из лучших программистов планеты…

  • Если массив это указатель, то почему тогда:

    char *s1 = «Это строка»;
    char s2[] = «Это строка»;

    //Компилируется и работает
    while (*s1!= ‘\0’)
    {
    printf(«%c», *s1);
    s1++;
    }

    //Не компилируется и не работает
    while (*s2!= ‘\0’)
    {
    printf(«%c», *s2);
    s2++;//компилятор ругается на эту строку
    }

  • Пару дней назад приобрёл персональник. Несколько минут назад прочёл минимум, который мне уготовил Вин. Ахуел, но и порадовался. Изучать много, много сложного \ интересного. Это что касается плана. На счёт Ромы могу сказать не многое: знаю я его от силы месяца 3-4, но за столь короткое время я понял что он не просто ментор, он как отец. Наставляет на нужный путь, даёт рекомендации по разным топикам, в целом даёт опыт, набитый на шишках и за это его стоит ценить. В свою очередь хочу сказать, что я рад моему знакомству с Ромой и искренне надеюсь, что тот успех, те знания которыми он обладает на данный момент приумножатся. Спасибо за всё!

    Alsat
    пока

  • #include

    const char * allowedFlags[] = {«-print», «-god-mode»};
    const char * allowedArgs[] = {«-n», «-p», «-j»};
    unsigned int checkAllowFlags(const char ** const flags)
    {
    printf(«Bad argument.
    «);
    }

    int main (int argc, char **argv[])
    {
    printf(«%d.
    «, argc);

    if (argc > 1)
    checkAllowedFlags(argv);
    return 0;

    }
    Gena, что не так? компилятор пишет: C:\Users\D3951\AppData\Local\Temp\ccWvEUxi.o:strings.c:(.text+0x6c): undefined
    reference to `checkAllowedFlags’
    collect2.exe: error: ld returned 1 exit status

  • Здравствуйте помогите пожалуйста. Имеется массив char. В них значения меняются. Например.

    code[0] 0x01

    code[1] 0xfe

    code[2] 0x02

    code[3] 0xfd

    Надо переписать в переменную long int kod.

    Чтобы в переменную kod записалась так. 0x01fe02fd

    Как это сделать, помогите пожалуйста. Спасибо. IDE У меня CVAVR.

  • я вот чего не понял.
    Вроде типа, например, char* name = &name; мы использовали для адреса и присвоение переменной значение адреса

    тип char *name использовали для вывода значения, указаном в адресе
    а что такое char * name?

  • А можно ли создавать и использовать многомерные массивы состоящие из разных типов элементов, например текста и чисел?
    И еще можно ли по аналогии с PHP создавать и использовать ассоциативные массивы, где ключом было бы число а значением текст?

  • Здравствуйте. Помогите, пожалуйста, разобраться. Решил поиграться со строками, и вот какая неувязка:

    Пытаюсь передать в функцию массив строк следующим образом

    #include

    //передаем в функцию массив строк и размер массива
    //если пытаться вычислить размер внутри самой функции не компилируется

    void printTempStr(char *string[], int size){

    //выводим значения переданного массива

    for(int i = 0; i < size; i++){
    printf(«.

    %s», *(string + i));
    }
    //до этого момента все отрабатывает нормально

    //декларируем временный массив строк (далее X это разные варианты)

    char * tmp_string[X] = {};

    //присваиваем временному массиву значения переданного массива

    for(int i = 0; i < Х; i++){
    *(tmp_string + i) = *(string + i);
    }

    printf(«.

    «); //разделитель

    //выводим значения временного массива
    for(int i = 0; i < Х; i++){
    printf(«.

    %s», *(tmp_string + i));
    }
    return;
    }

    int main (void){

    char * word[] = {«String1», «Str2»};

    int wordSize = sizeof(word)/sizeof(int);

    printTempStr(word, wordSize);

    return 0;
    }

    Так вот, если вместо Х я ставлю просто 2 все срабатывает(компилируется, присваивается, выводит).
    если вместо Х ставлю переданный в функцию размер исходного массива size не компилируется и выводит вот это:

    strings.c: In function ‘printTempStr’:
    strings.c:15:2: error: variable-sized object may not be initialized
    char * tmp_string[size] = {};

    но там же тоже двойка, это можно проверить выведя size через printf в консоль.

    Если не ставлю вместо Х ничего вроде компилируется, но при запуске выдает ошибку и принудительно закрывает программу
    Что здесь не так?

    Занимаюсь на Windows 10, gcc.
    компилирую: gcc strings.c -o strings.exe -std=c99

    З.Ы: и почему нельзя вычислить размер массива внутри функции?

  • Хороший стрим) Правильная мотивация для тех, кто в начале. Беспокоит вопрос про кэш. Каким образом вы предлагаете его реорганизовать? Философски, других способов организации кэш памяти я не вижу. Если только оторвать кэш когерентность? Но это убьет вообще все.

  • 42 минута. Данные есть, а вот о том что алгоритмы ЕСТЬ(!), я бы поспорил. Как ты правильно сказал, есть только процессорная обработка 😉
    P.s. Не округляй всех до совсем не понимающих, а то у тебя бывает

  • Посмотрел в записи. В очередной раз утвердился в мысли что надо изучать фундаментальные вещи.
    Только есть один нюанс, лучше всего начинать это изучать когда ещё теле лет 20 или меньше. Так как с годами растут обязательства и выделять время на учебу категорически трудно. Я 12 лет прозанимался черт знает чем, и в этом году только решил что так дальше нельзя, ведь я всегда хотел стать программистом. Всегда считал настоящими программистами серьезных дядей которые разрабатывают сложный софт, всякие системы управления полетами, системы безопасности, сложные криптографические штуки. Всяких разработчиков сайтов в принципе не считал за программистов, это как песочница для детей.

    В общем я завидовал крутым программерам, а учиться мне было лень да и жить на что то надо, вот так и прошли годы.

    А в конце прошлого года я принял решение, что либо сейчас, либо никогда. С нуля без специализированного образования, я сейчас стажёр frontend-разработчик, и скоро надеюсь поступлю в первый класс, буду джуном. Вот так, а я над ними насмехался))

    В интернете действительно практически все говорят что базу учить не надо, берёшь инструмент и в бой. Я согласен что когда вариантов нет как в ИТ залезть то это нормальный способ, но нельзя останавливаться на каких то мелких частностях.
    Я понимаю многих работодателей, которым категорически не хватает низкооплачиваемых работников, что бы простые сайты делать не надо быть семь пядей во лбу.

    Но программист должен стремиться к большему, ведь если мы сами не будем стремиться отрасль развивать то кто это делать будет?

    Спасибо за стримы, очень надеюсь что мне хватит сил и времени стать настоящим специалистом.

    Читаю Тененбаума «Архитектура компьютера», буквально на днях купил, оторваться не возможно. Всем новичкам, как я, прям очень советую))

  • Гена честно, до этого урока объяснял все супер, повторял много и все было ясно. Тут же все очень быстро, нечего не понятно хоть уже 100 раз его пересмотрел и 90% написанного кода у меня вообще не работает… (((

  • Чёт я не понимаю вообще какое-то замешательство, ты сам себе противоречишь говоришь что стринга в C++ гавно и потом через 15 минут говоришь зачем делать велосипеды, в предыдущих видосах говоришь велосипеды это круто и их надо писать. Плюс логика и код который ты пишешь(я конечно не сишник) но выглядит как какое-то гавно хотя бы твоя накидка по получению длины строки это полный фарш, с твоими знаниями как ты их демонстрируешь то там должен был быть как минимум подход с делением памяти строки на память одного символа, но ты ебашишь как джун через цикл я заорал в голосину просто как увидел

  • Здравствуйте дорогой учитель
    Ваше видеоуроки мне очень нравится, вы все детально объясняете!!!
    Можете подсказать
    Я программирую на среде DevC++ и у меня выводит ошибка с strlen
    Почему? Я все хорошо проверил но ошибка
    Может это из-за среды devc++?

  • Хорошие уроки, как раз то что нужно начинающему программисту. Если бы еще по каждому уроку были домашние задания с ответами (не видео, а текст): посмотрел урок, сделал домашку по уроку на закрепление материала…. А так долго приходится искать примеры программ на закрепление пройденного материала. БОЛЬШОЕ СПАСИБО ЗА ВАШИ ВИДЕО УРОКИ!!!!

  • Язык это способ выражения своих мыслей в реальность. Его не нужно учить, им необходимо правильно уметь пользоваться. Метапонимание проще говоря.

    Это как Русский язык все пользуются, но никто его не знает. Знание нужно, но лишь после того как научишься пользоваться.