Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
NaV'i4ok
3 / 3 / 0
Регистрация: 18.03.2011
Сообщений: 85
#1

Сравнение двух строк - C++

04.01.2012, 19:38. Просмотров 2001. Ответов 16
Метки нет (Все метки)

Сравнение двух строк
Как прервать цикл если введена пустая строка?
Если : char str[SLEN]="\n";
if (strcmp(pa[i].fullname ,str)) //то продолжить цикл
else
break;// цикл не прерываеться

Весь код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <cstring>
using namespace std;
const int SLEN=30;
struct student{
    char fullname[SLEN];
    char hobby[SLEN];
    int ooplevel;
};
int main()
{
    cout<<"Enter class size: ";
    int class_size;
    cin>>class_size;
    ...
    student* ptr_stu=new student[class_size];
    int entered=getinfo(ptr_stu, class_size);
    ...
}   
int getinfo(student pa[],int n)
{
    int i=0;
    while (i<n)
    {
        cout<<"Enter a name: ";
        cin.getline(pa[i].fullname,SLEN);
        char str[SLEN]="\n";
        if (strcmp(pa[i].fullname ,str))
        {
            cout<<"Enter a hobby: ";
            cin.getline(pa[i].hobby,SLEN);
            cout<<"Enter ooplevel: ";
            cin>>pa[i].ooplevel;
            cin.get();
            ++i;
        }
        else
            break;
    }
    return i;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2012, 19:38     Сравнение двух строк
Посмотрите здесь:

Сравнение двух строк - C++
Написать функцию, выполняющую сравнение строк (с игнорированием множественных пробелов).

Сравнение двух строк - C++
Здравствуйте! возникла у меня небольшая проблема со сравнением двух строк разных типов. А точнее - wchar_t и char*. Понимаю, что просто...

Сравнение двух строк оператором == - C++
Мое почтение, уважаемые форумчане! Делаю шаблонный класс и случайно столкнулся с аномалией в моем понимании сравнения строк: две строки...

Лексикографическок сравнение двух строк с++ - C++
Маленький Петя очень любит подарки. Его мама подарила ему на день рождения две строки равной длины, состоящие из больших и маленьких букв...

Сравнение двух строк string - C++
Добрый день. Никак не пойму почему не хочет работать такой способ сравнения двух string строк, сравнивает верно только если ввести...

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

Сравнение двух символьных строк - C++
условие задачи состоит в том,чтобы написать программу для сравнения двух символьных строк,но с применением выделения динамической памяти

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1747 / 1090 / 71
Регистрация: 13.09.2011
Сообщений: 3,120
04.01.2012, 19:40     Сравнение двух строк #2
C++
1
if(pa[i].fullname[0] == '\n' || pa[i].fullname[0] == 0)
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.01.2012, 19:43     Сравнение двух строк #3
C++
1
2
if (  ! (*s)  )
    break;
NaV'i4ok
3 / 3 / 0
Регистрация: 18.03.2011
Сообщений: 85
04.01.2012, 19:55  [ТС]     Сравнение двух строк #4
Цитата Сообщение от go Посмотреть сообщение
Код C++
1
2
if ( ! (*s) )
break;
это вместо моего if (strcmp(pa[i].fullname ,str))
так сразу прерывает даже если не вводить пустую строку
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.01.2012, 20:04     Сравнение двух строк #5
Вместо s вставляете любую свою переменную.
NaV'i4ok
3 / 3 / 0
Регистрация: 18.03.2011
Сообщений: 85
04.01.2012, 20:14  [ТС]     Сравнение двух строк #6
Цитата Сообщение от go Посмотреть сообщение
Вместо s вставляете любую свою переменную.
вставляю
C++
1
2
3
4
5
6
7
8
9
10
11
if (strcmp(pa[i].fullname ,str))
        {
            cout<<"Enter a hobby: ";
            cin.getline(pa[i].hobby,SLEN);
            cout<<"Enter ooplevel: ";
            cin>>pa[i].ooplevel;
            cin.get();
            ++i;
        }
        else if(!(pa[i].fullname ))
            break;
не прерывает цикл при вводе пустой строки
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.01.2012, 20:16     Сравнение двух строк #7
Плохо вставляете. Прочитайте мой пример еще раз. Разадресацию пропускаете.
NaV'i4ok
3 / 3 / 0
Регистрация: 18.03.2011
Сообщений: 85
04.01.2012, 20:18  [ТС]     Сравнение двух строк #8
вставляю
C++
1
2
else if(!(*(pa[i].fullname )))
            break;
не прерывает
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.01.2012, 20:23     Сравнение двух строк #9
Теперь правильно сделали. Если не прерывает, значит первый символ не равен '\0'. Значит она не пустая. Так как strlen такой строки не равен нулю.
NaV'i4ok
3 / 3 / 0
Регистрация: 18.03.2011
Сообщений: 85
04.01.2012, 20:26  [ТС]     Сравнение двух строк #10
а как прервать если вместо имени введена пустая строка(Enter)?
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.01.2012, 20:51     Сравнение двух строк #11
Если в ней энтер, то это не пустая строка.
C
1
2
if ( *(s) == '\n' )
    break;
NoMasters
04.01.2012, 21:03
  #12

Не по теме:

А теперь внимательно смотрим на первый ответ

NaV'i4ok
3 / 3 / 0
Регистрация: 18.03.2011
Сообщений: 85
04.01.2012, 21:13  [ТС]     Сравнение двух строк #13
Цитата Сообщение от go Посмотреть сообщение
Если в ней энтер, то это не пустая строка. Код C
1
2
3
if
если в строке Enter - и это не пустая то как ввести пустую?

тоже не прерывает цикл
NoMasters
Псевдослучайный
1747 / 1090 / 71
Регистрация: 13.09.2011
Сообщений: 3,120
04.01.2012, 21:22     Сравнение двух строк #14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int getinfo(student pa[],int n)
{
    int i=0;
    while (i<n)
    {
        cout<<"Enter a name: ";
        cin.getline(pa[i].fullname,SLEN);
        if(pa[i].fullname[0] == '\n' || pa[i].fullname[0] == 0)
            break;
        cout<<"Enter a hobby: ";
        cin.getline(pa[i].hobby,SLEN);
        cout<<"Enter ooplevel: ";
        cin>>pa[i].ooplevel;
        ++i;
    }
    return i;
}
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.01.2012, 21:31     Сравнение двух строк #15
Цитата Сообщение от NaV'i4ok Посмотреть сообщение
если в строке Enter - и это не пустая то как ввести пустую?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
 
int main()
{
    std::string s;
 
    std::cin >> s;
    if ( s.length () == 0)
        std::cout << "empty" << std::endl;
 
    std::system("pause");
    return 0;
}
Для того, чтобы ввести пустую строку, просто закончите ввод (Ctrl - Z нажмите)
NaV'i4ok
3 / 3 / 0
Регистрация: 18.03.2011
Сообщений: 85
04.01.2012, 21:57  [ТС]     Сравнение двух строк #16
Из условия:
Функция требует ввода данных о студентах и сохраняет их в памяти.Она прекращает ввод сразу после заполнения массива или при получении символа пустой строки вместо имени студента.
В структуре массив символов по условию, а не строка string
C++
1
2
3
4
5
struct student{
    char fullname[SLEN];
    char hobby[SLEN];
    int ooplevel;
};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2012, 22:05     Сравнение двух строк
Еще ссылки по теме:

Сравнение двух строк функцией strcmp - C++
Напишите программу, которая использует функцию strcmp для сравнения двух строк, вводимых пользователем. Программа должна определить: первая...

Сравнение двух строк и вывод общих символов - C++
#include &lt;iostream&gt; using namespace std; void main() { char str; char strl;

Сравнение двух строк без учета пробелов - C++
Пишем в Microsoft Visual Studio 2010 -&gt; Win32 Console Application -&gt; C++ Задача такова: написать программу которая сравнивает две строки...

Сравнение двух строк с выделением динамической памяти - C++ - C++
Подскажите почему не работает код? Ввожу две разные строки и всегда выводит equal. Уже как только не крутил. Подскажите пожалуйтста, что...

Сравнение двумерного массива созданного из двух строк - C++
Вот первая проблема,если при вводе первого предложения поставить пробел то второе он вводить уже не требует а сразу работает далее, почем...


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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.01.2012, 22:05     Сравнение двух строк #17
Цитата Сообщение от NaV'i4ok Посмотреть сообщение
В структуре массив символов по условию, а не строка string
Особо ничего не меняется
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
int main()
{
        char s[BUFSIZ];
 
        std::cin >> s;
        if ( ! *s  )
                std::cout << "empty" << std::endl;
 
        std::system("pause");
        return 0;
}
Yandex
Объявления
04.01.2012, 22:05     Сравнение двух строк
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru