Не хочет сравнивать символьные строки. Где ошибка?

Всем добрый день! В очередной раз обращаюсь за помощью..
Нужно написать программу, которая будет принимать ввод двух строк некоторого текста и посимвольно сравнивать их, выдавая на экран результат сравнения.
Вот мой код:

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    setlocale(LC_ALL, "rus");
    const int MAX=100;
    char s1[MAX];
    char s2[MAX];
    cout << "Введите строку 1: ";
    cin.getline(s1, MAX);
    cout << "Введите строку 2: ";
    cin.getline(s2, MAX);
    if (strnicmp(s1, s2) > 0)
    {
        cout << "Строка 1 меньше строки 2" << endl;
    }
    else
    {
        cout << "Строка 1 больше строки 2" << endl;
    }
    system("pause");
    return 0;
}

Программ при компиляции выдает ошибку в этом месте if (strnicmp(s1, s2) > 0) объясняя ее этим: «Слишком мало аргументов в вызове функции»
Если записать код через if (strcmp(s1, s2) > 0) то сравнение будет работать, но до того момента, как я начну сравнивать цифры с буквами, или текст без пробелов с текстом с пробелами. Иначе говоря сравнение строк, а не кол-ва их символов.
Тут и вопрос, каких аргументов ему не хватает?

Иначе говоря сравнение строк, а не кол-ва их символов.

strcmp как раз выполняет сравнение строк.

Тут и вопрос, каких аргументов ему не хватает?

Не хватает количество сравниваемых символов. Суффикс n указывает на это.

А вообще, функция нестандартная, поэтому лучше ей вообще не пользоваться.

Ничего не понял... Я использую strnicmp для сравнения кол-ва символов без учета регистра.. Вот именно ей и не хватает аргументов, тоже не понимаю каких..
strcmp работает на половину, но мне оно не нужно для условия задачи. Я написал про нее лишь с целью узнать для себя ответ, в жизни пригодиться..

Вот именно ей и не хватает аргументов, тоже не понимаю каких..

Не хватает количества сравниваемых символов. (суффикс n в имени функции)
То есть вызов нужно писать так:

strnicmp( c_str1, c_str2, n )

А в вашем случае:

strnicmp(s1, s2, strlen(s1))

porshe, такой момент.. Вижуал поругал меня за надпись strnicmp и предложил записать ее как _strnicmp. Я записал и программ вроде заработал. Сравнивает и цифры с цифрами, и буквы с цифрами, и буквы с буквами.. Но.. С пробелами какой-то косяк. Сравнивая a(пробел)sd и 12345 выдает, что первая строка больше..

if (_strnicmp(s1, s2, strlen(s1)) < 1)

Сравнивая a(пробел)sd и 12345 выдает, что первая строка больше..

strcmp, strncmp, strnicmp и прочее выдаёт разность первых отличающихся символов строки №1 и строки №2. В данном случае дело даже не в пробеле (строго говоря, пробел ничем не отличается от остальных символов). Первые отличающиеся символы: a и 1, поэтому _strnicmp вернёт static_cast<int>("a" - "1"), что больше 0.

mychernenko, если тебе нужно сравнить в какой из строк находится больше символов, то можно поступить так

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

const int MAX = 100;

int strComp(char *, char *);

int main()
{
    setlocale(LC_ALL, "rus");

    char s1[::MAX];
    char s2[::MAX];

    cout << "Введите строку 1: ";
    cin.getline(s1, ::MAX);
    cout << "Введите строку 2: ";
    cin.getline(s2, ::MAX);

    int answ = strComp(s1, s2);

    if (answ > 0){
        cout << "Строка 1 больше строки 2" << endl;
    }
    else if (answ < 0){
        cout << "Строка 1 меньше строки 2" << endl;
    }
    else{
        cout << "Строки равны.\n";
    }

    cin.get();
    return 0;
}

int strComp(char * s1, char * s2)
{
    int str_one = 0, str_two = 0;

    for (char * i = s1; *i; i++){
       str_one++;
    }

    for (char * j = s2; *j; j++){

        str_two++;
    }

    if (str_one > str_two){
        return 1;
    }
    else if (str_one < str_two){
        return -1;
    }
    else{
        return 0;
    }
}

beginner, благодарю тебя добрый человек! Все работает идеально! Одного я чутка не понимаю, что такое char *? Уж простите за такой тупой вопрос(((

beginner, на тему

сравнить в какой из строк находится больше символов

есть стандартная функция strlen(). Т.е. твоя программа сводится к

#include <iostream>
#include <cstring>
using std::cout;
using std::cin;
using std::endl;
using std::strlen;

const int MAX = 100;

int strComp(char *, char *);

int main()
{
    setlocale(LC_ALL, "rus");

    char s1[::MAX];
    char s2[::MAX];

    cout << "Введите строку 1: ";
    cin.getline(s1, ::MAX);
    cout << "Введите строку 2: ";
    cin.getline(s2, ::MAX);

    long res = (long)strlen(s1) - (long)strlen(s2);

    if (res > 0){
        cout << "Строка 1 больше строки 2" << endl;
    }
    else if (res < 0){
        cout << "Строка 1 меньше строки 2" << endl;
    }
    else{
        cout << "Строки равны.\n";
    }

    cin.get();
    return 0;
}

mychernenko, char * — это указатель на char. Читай Указатели в C++ — урок 7.

Упс... И убрать на фиг строчку!!!

int strComp(char *, char *);

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.