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

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

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

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

04.01.2012, 19:38. Просмотров 1948. Ответов 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;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1743 / 1086 / 71
Регистрация: 13.09.2011
Сообщений: 3,109
04.01.2012, 19:40     Сравнение двух строк #2
C++
1
if(pa[i].fullname[0] == '\n' || pa[i].fullname[0] == 0)
go
Эксперт C++
3585 / 1365 / 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++
3585 / 1365 / 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++
3585 / 1365 / 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++
3585 / 1365 / 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++
3585 / 1365 / 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
Псевдослучайный
1743 / 1086 / 71
Регистрация: 13.09.2011
Сообщений: 3,109
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++
3585 / 1365 / 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     Сравнение двух строк
Еще ссылки по теме:

C++ Сравнение двух строк string
C++ Сравнение двумерного массива созданного из двух строк
C++ Сравнение двух строк с выделением динамической памяти - C++
Сравнение двух строк (экземпляры класса string ) задействуя метод compare C++
Сравнение двух строк C++

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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3585 / 1365 / 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     Сравнение двух строк
Ответ Создать тему
Опции темы

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