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

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

Войти
Регистрация
Восстановить пароль
 
Lexa_Okatow
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 22
#1

почему? - C++

11.12.2013, 18:54. Просмотров 213. Ответов 7
Метки нет (Все метки)

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <string>
#include <iostream>
using namespace std;
int main()
{
    int k;
    char str[100];
    char str1[50] = { 0 }, str2[50] = { 0 };
    cout << "Vvedite stroky" << endl;
    gets_s(str);
    cout << "Vvedite k" << endl;
    cin >> k;
    while (str[k] != ' '&& k>0)
        k--;
 
    strncpy_s(str1, str, k);
    strcpy_s(str2, str + k);
 
    cout << "1-" << str1 << endl;
    cout << "2-" << str2 << endl;
    system("pause");
    return 0;
}
Объясните почему здесь while (str[k] != ' '&& k>0) нужно указывать условие k>0. Препод сказал что оно здесь не нужно , а без него программа работает криво. и что вообще этот цикл делает?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lpvoid
 Аватар для lpvoid
320 / 303 / 17
Регистрация: 06.03.2013
Сообщений: 869
11.12.2013, 18:57     почему? #2
Lexa_Okatow, потому что не бывает отрицательных элементов в массиве. строка - массив.
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
11.12.2013, 19:04     почему? #3
Это своеобразное разбиение строки на токены.
zss
Модератор
Эксперт С++
 Аватар для zss
6111 / 5714 / 1849
Регистрация: 18.12.2011
Сообщений: 14,593
Завершенные тесты: 1
11.12.2013, 19:04     почему? #4
Здесь разумно выражения поменять местами,
чтобы при k<0 не вычислялось str[k]
C++
1
2
3
if(k>=strlen(str))
     k=strlen(str)-1; 
while (k>0 && str[k] != ' ')
Lexa_Okatow
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 22
11.12.2013, 19:09  [ТС]     почему? #5
дело в том что у меня во второй строке выводит какой то бред, если я убираю k>0, препод сказал что оно здесь не нужно, во ткак мне ему объяснить что он не прав?
lpvoid
 Аватар для lpvoid
320 / 303 / 17
Регистрация: 06.03.2013
Сообщений: 869
11.12.2013, 19:09     почему? #6
Lexa_Okatow, загружайте изображения на форум.
Lexa_Okatow
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 22
11.12.2013, 19:20  [ТС]     почему? #7
Цитата Сообщение от lpvoid Посмотреть сообщение
Lexa_Okatow, загружайте изображения на форум.
http://rghost.ru/50895140/image.png

http://rghost.ru/50895199/image.png
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2013, 21:29     почему?
Еще ссылки по теме:

Почему ругается на else? C++
C++ Почему не работает?
C++ почему 3.?
Почему не компилируется C++
Почему всегда 1 ? C++

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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
6111 / 5714 / 1849
Регистрация: 18.12.2011
Сообщений: 14,593
Завершенные тесты: 1
11.12.2013, 21:29     почему? #8
Цитата Сообщение от Lexa_Okatow Посмотреть сообщение
как мне ему объяснить что он не прав
Если больше пробелов не окажется, то цикл надо завершить на самом первом символе
(т.е. когда k=0 получим первое слово).
Yandex
Объявления
11.12.2013, 21:29     почему?
Ответ Создать тему
Опции темы

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