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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 64, средняя оценка - 4.69
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
#1

не понимаю момент \0 - C++

27.10.2009, 19:51. Просмотров 8179. Ответов 26

C++
1
2
3
4
5
6
7
string s;
cin>>s;
int n=0;
int w=0;
while(s='\0'){
++n;
if(s=' ')++w;
ошибки
Error 1 error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion) c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 13 proba
Error 2 error C2451: conditional expression of type 'std::basic_string<_Elem,_Traits,_Ax>' is illegal c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 16 proba
Error 3 error C2451: conditional expression of type 'std::basic_string<_Elem,_Traits,_Ax>' is illegal c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 18 proba
что не так?Объясните мне когда нужн юзать \0????или же в данном случае что буде правильнее?как объяснить компилятору,что мне нужен конец строки?

Добавлено через 57 секунд
и EOF попробовал,тоже самое
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2009, 19:51     не понимаю момент \0
Посмотрите здесь:

C++ С++ не понимаю
C++ Не Понимаю С++
не понимаю. строки. C++
C++ не понимаю условие!!
C++ чуть не понимаю..
C++ Не понимаю CALLBACK
C++ Не понимаю вопроса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
=DelFin=
1 / 1 / 0
Регистрация: 26.10.2009
Сообщений: 8
27.10.2009, 19:57     не понимаю момент \0 #2
C++
1
2
3
4
5
6
7
char s[16];
cin>>s;
int n=0;
int w=0;
while(s=='\0'){
++n;
if(s==' ')++w;
Оператор '=' присвоения в условии цикла не стоит использовать, лучше все таки оператор равенства '=='. Это из того что вижу, а вообще целиком можно посмотреть код?

Типа string в си нет и небыло, есть тип char[]. В скобках размерность.

прр... Идея понятна... Зачем сравнивать всю строку с нуль символом? Операция недопустимая, на счет нуль символа ты прав
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
27.10.2009, 19:58  [ТС]     не понимаю момент \0 #3
=DelFin=,
Error 1 error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion) c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 13 proba
Error 2 error C2678: binary '==' : no operator found which takes a left-hand operand of type 'std::string' (or there is no acceptable conversion) c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 16 proba
Error 3 fatal error C1903: unable to recover from previous error(s); stopping compilation c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 16 proba
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
27.10.2009, 20:10     не понимаю момент \0 #4
МедведЪ, в Си юзай символ конец строки
в С++ есть str.length() - длина строки. str[str.length()-1] - последний символ строки.
=DelFin=
1 / 1 / 0
Регистрация: 26.10.2009
Сообщений: 8
27.10.2009, 20:14     не понимаю момент \0 #5
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"
 
using namespace std;
int main()
{
char s[16]; //обьявляем строку длинной 16 символов
cin >> s; // вводим через поток ввода
int i; //счетчик цикла
int n=0; //счетчики
int w=0;
 
for (i=0;i<15;i++) // перебираем все символы
{
    if (s[i]='\0') ++n; //символ конца, добавить к счетчику
    else
    if(s[i]=' ') ++w; // пробел, добавить 1 к счетчику
}
 
сout << "Probels:" << w << endl;
сout << "Ends:" << n << endl;
 
return 0; //завершиться
}
Присоединяюсь к предидущему посту, если программа не учебная. Полностью твоя прога выглядит так.
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
27.10.2009, 20:16  [ТС]     не понимаю момент \0 #6
TanT, у меня половина С половина С++в си как это делать?ну конец строки?У меня ошибки

Добавлено через 1 минуту
Цитата Сообщение от =DelFin= Посмотреть сообщение
if (s[i]='\0') ++n;
а это уже не массив?мне надо со string
=DelFin=
1 / 1 / 0
Регистрация: 26.10.2009
Сообщений: 8
27.10.2009, 20:18     не понимаю момент \0 #7
Ну, в С строка есть массив символов, это стандарт языка. В других языках это тоже массив символов, только в С запись более наглядно отражает сущность строки.
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
27.10.2009, 20:19     не понимаю момент \0 #8
Цитата Сообщение от МедведЪ Посмотреть сообщение
TanT, у меня половина С половина С++в си как это делать?ну конец строки?У меня ошибки

Добавлено через 1 минуту

а это уже не массив?мне надо со string
давай отделим мух от котлет. на каком языке пишешь С/С++?
и второй самый главный вопрос: зачем тебе конец строки или, иначе, какова суть задания?
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
27.10.2009, 20:22  [ТС]     не понимаю момент \0 #9
Цитата Сообщение от TanT Посмотреть сообщение
какова суть задания?
ну просто определисть длину строки(символы) и подсчет слов в строке..

Цитата Сообщение от TanT Посмотреть сообщение
давай отделим мух от котлет. на каком языке пишешь С/С++?
С++ну так что,варианты есть?
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
27.10.2009, 20:24     не понимаю момент \0 #10
ещё один важный момент.
cin>>s - берёт строку до пробела или энтера, скомпили и введи две строки через пробел

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    string s,ss;
    cin>>s>>ss;
    
    cout<<"s:"<<s<<"; ss:"<<ss<<endl;
 
    system("pause");
    return 0;
}
Добавлено через 54 секунды
длина строки str.length()
=DelFin=
1 / 1 / 0
Регистрация: 26.10.2009
Сообщений: 8
27.10.2009, 20:24     не понимаю момент \0 #11
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
#include <iostream>
 
 
using namespace std;
int main()
{
char s[16]; //обьявляем строку длинной 16 символов
cin >> s; // вводим через поток ввода
int i; //счетчик цикла
int n=0; //счетчики
int w=0;
 
for (i=0;i<15;i++)
{
    if (s[i]='\0') n=i-1;
    else
    if(s[i]=' ') ++w;
}
w=w+1;
 
сout << "Words:" << w << endl;
сout << "Dlina:" << n << endl;
 
 
return 0;
}
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
27.10.2009, 20:27  [ТС]     не понимаю момент \0 #12
Цитата Сообщение от TanT Посмотреть сообщение
cin>>s - берёт строку до пробела или энтера, скомпили и введи две строки через пробел

Цитата Сообщение от TanT Посмотреть сообщение
cin>>s>>ss;
я этот трюк не знал,как понять?

Добавлено через 20 секунд
Цитата Сообщение от TanT Посмотреть сообщение
длина строки str.length()
я знаю,но сам хочу написать

Добавлено через 1 минуту
Цитата Сообщение от =DelFin= Посмотреть сообщение
char s[16]; //обьявляем строку длинной 16 символов
Цитата Сообщение от МедведЪ Посмотреть сообщение
мне надо со string
я ведь написал
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
27.10.2009, 20:34     не понимаю момент \0 #13
вот тебе простой пример на твою задачу
умные человеки типа Rififi сказали бы что для поиска пробела надо ползоваться find, но это тебе пример чтобы познакомиться со string

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
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    string s;
    int count=0, countWord=0, countPrev=0;
 
    getline(cin,s);  // получить строку до нажатия энтер (по умолчанию)
    cout<<"s:"<<s;
 
    while (count<s.length())
    {
        if (s[count]==' ')
        {
            ++countWord;
            cout<<"\n word: "<<countWord<<" length: "<<count-countPrev;
            countPrev=count;
        }
        ++count;
    }
 
    system("pause");
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от МедведЪ Посмотреть сообщение

я этот трюк не знал,как понять?
cin>>s>>ss; это тоже что cin>>s; cin>>ss;
в книжках пишут
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
27.10.2009, 20:38  [ТС]     не понимаю момент \0 #14
TanT,
Error 1 error C3861: 'getline': identifier not found c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 15 proba
Error 2 error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion) c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp 16 proba
Добавлено через 34 секунды
Цитата Сообщение от TanT Посмотреть сообщение
в книжках пишут
у меня щас КиР а в Си cout нету

Добавлено через 12 секунд
cin то есть
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
27.10.2009, 20:45     не понимаю момент \0 #15
Цитата Сообщение от МедведЪ Посмотреть сообщение
С++ну так что,варианты есть?
какое С ?

только С++ весь код вставь и откомпили. поробуй закоментить using namespace std;
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
27.10.2009, 20:48  [ТС]     не понимаю момент \0 #16
Цитата Сообщение от TanT Посмотреть сообщение
поробуй закоментить using namespace std;
ну да...и это не пойму,почему всем кажется что это только ламеры делают так?
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
27.10.2009, 20:55     не понимаю момент \0 #17
Цитата Сообщение от МедведЪ Посмотреть сообщение
ну да...и это не пойму,почему всем кажется что это только ламеры делают так?
МедведЪ, без паники, ты тут наверно единственный кто пытается вникнуть и понять, а не просто кричать ПАмагите!!! что уже достойно уважения

я тебе без всякого ехидства рекомендую почитать литературу из ФАКа по языку. Я вот "Освой самостоятельно С++ за 21 день" дочитываю, говорят хорошая вот решил проверить. хоть многое уже в других чиатл, всё равно есть чему поучиться

Добавлено через 1 минуту
совсем если затор будет спрашивай, только формулируй чётко вопрос. потому что правильно сформулированный вопрос уже половина ответа (с) сам пока будешь придумывать как сказать о решении догадаешься, бывает и такое
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
27.10.2009, 23:05  [ТС]     не понимаю момент \0 #18
Цитата Сообщение от TanT Посмотреть сообщение
ты тут наверно единственный кто пытается вникнуть и понять, а не просто кричать ПАмагите!!! что уже достойно уважения
ахах ну спасибоно во всяком случае не единственный

Не по теме:

ксттаи решил КиР бросить,тут,на форуме говорят что с Левым переводом,да и компилятор много ругается...страуструп сойдет мне?


ну все же,по делуу меня ошибки...

Добавлено через 1 час 48 минут
TanT, ладно,скажи мне почему тут ошибка?
C++
1
2
string s;
cin>>s;
?
и какой синтаксис функции strlen?
M128K145
Эксперт С++
8282 / 3501 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
28.10.2009, 00:34     не понимаю момент \0 #19
МедведЪ, тебе надо считать до нажатия ентера? Если да, то попробуй такой вариант
C++
1
getline(cin, s, '\n');
где cin - поток, s - строка, '\n' - символ, до которого считывать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2009, 01:59     не понимаю момент \0
Еще ссылки по теме:

C++ isdigit() не понимаю
C строки,не понимаю C++
C++ Не понимаю записи
Не понимаю вызовы C++

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

Или воспользуйтесь поиском по форуму:
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
28.10.2009, 01:59     не понимаю момент \0 #20
Цитата Сообщение от МедведЪ
ксттаи решил КиР бросить,тут,на форуме говорят что с Левым переводом,да и компилятор много ругается...страуструп сойдет мне?
нужно бумажную брать и обе, Страуструпа не потянешь, так как он приводит примеры со структурами, которые нужно знать уже
Yandex
Объявления
28.10.2009, 01:59     не понимаю момент \0
Ответ Создать тему
Опции темы

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