Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 1
Регистрация: 30.11.2013
Сообщений: 31

Сравнение char* строк

06.02.2023, 16:32. Показов 811. Ответов 5

Студворк — интернет-сервис помощи студентам
Здравствуйте.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
void fTest()
{
    cout<<"Test is successful"<<endl;
}
 
int main(int argc, char*argv[])
{
    char* str="test1";
cout<<endl;
    for (int i=0;i<argc;i++)
    {
        cout<< argv[i]<<endl;
        if (argv[i]==str)
        {
         fTest();
        }
    }
system("pause");
    return 0;
Объясните пожалуйста, как исправить? *str это указатель на "0" элемент массива char "test1". Если я введу в консоли "test1", то в массиве указателей *argv появятся два массива: массив char "имя исполняемой программы" и массив char "test1". Указатель argv[1] будет указывать на первый элемент массива char "test1". Далее я проверяю соответствие указателей. Что я неправильно понимаю в работе указателей? Нужно создать цикл и провести сравнение всех элементов массивов str и argv[1]?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.02.2023, 16:32
Ответы с готовыми решениями:

Сравнение char строк
bool qu() { //Функция вопроса char q; bool answer; clr(жел); Sleep(10); (cin &gt;&gt; q).get(); clr(); if ((q == 'д') || (q ==...

Сравнение char строк
#include &lt;iostream&gt; using namespace std; int main() { float a, b; int c; char d; cout &lt;&lt; &quot;Input your first number: &quot;...

Сравнение char* строк
Всем и каждому доброго времени суток. У меня появилась проблема, с которой я уже длительный период времени не могу справиться: моя...

5
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
06.02.2023, 17:40
Лучший ответ Сообщение было отмечено Volga_ как решение

Решение

Сравнивать надо не указатели, а сами строки с помощью функции strcmp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstring>
using namespace std;
void fTest()
{
    cout<<"Test is successful"<<endl;
}
 
int main(int argc, char*argv[])
{
    const char* str="test1";
    cout<<endl;
    for (int i=1;i<argc;i++)
    {
        cout<< argv[i]<<endl;
        if (strcmp(argv[i],str)==0)
        {
            fTest();
        }
    }
    system("pause");
    return 0;
}
1
1 / 1 / 1
Регистрация: 30.11.2013
Сообщений: 31
06.02.2023, 18:09  [ТС]
Спасибо за ответ. Мне хотелось бы разобраться с указателями. Если бы мы не использовали библиотеку "cstring" и функцию strcmp(), то как следовало реализовать? В цикле поэлементно сравнивать содержимое для каждого указателя?
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
06.02.2023, 19:43
Лучший ответ Сообщение было отмечено DenNeDobriy как решение

Решение

Цитата Сообщение от DenNeDobriy Посмотреть сообщение
В цикле поэлементно сравнивать содержимое для каждого указателя?
Можно написать собственную функцию:
C++
1
2
3
4
5
6
7
bool IsEqual(const char* s1,const char* s2)
{
    for(const char* p1=s1,*p2=s2; *p1!=0 && *p2!=0; ++p1,++p2)
        if(*p1!=*p2)
           return false;
   return *p1==0 && *p2==0;
}
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
06.02.2023, 19:47
Цитата Сообщение от zss Посмотреть сообщение
char* p1=s1,*p2=s2;
const char* p1=s1,*p2=s2;

Цитата Сообщение от zss Посмотреть сообщение
*p1!=0 && *s1!=0
*s1!=0 ???
1
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
06.02.2023, 19:50
TheCalligrapher, спасибо, поправил
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.02.2023, 19:50
Помогаю со студенческими работами здесь

Сравнение текста из файла и сравнение с текстом в программе char - Dev C++
Доброго времени суток! Имеется код программы: ifstream test(&quot;primer.txt&quot;); char awm = &quot;kod&quot;; char buff; test &gt;&gt; buff; if...

Как организовать ввод/вывод строк организовать с отдельными функциями: char* gets(char*s) и int puts(char *s)?
При этом функция main() должна содержать только описание массивов/строк и вызовы функций для формирования, печати и обработки...

Сравнение разных типов *Char и Char
Друзья, выполняю задание по имитации консольной команды Windows. Встретился с проблемой разделения введенной строки на отдельные слова, но...

Написать перегруженную функцию max(char*, char*), возвращаю большую из передаваемых ей символьных строк
Написать перегруженную функцию max(char*, char*), возвращаю большую из передаваемых ей символьных строк.

Сравнение char с char
Здравствуйте помогите пожалуйста решить проблему. В общем не работает сравнение фамилии и телефона(что-то с переменной char), а конкретно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru