Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
3 / 3 / 4
Регистрация: 08.02.2014
Сообщений: 213
1

Управление строками

14.02.2014, 17:10. Показов 1985. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
Я изучаю с++ недавно, в как учебное пособие использую "С++ для чайников".
Пример перепечатал с книги, а он не работает!
По возможности укажите не только ошибку ну и почему нужно было сделать так, а не иначе!
Вот в чем суть:

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//Concatenate - объединение двух строк, которые разделяются символом
#include<stdio.h>
#include<iostream>
 
//включаем файлы, необходимы для использования функции работы со строками
#include<string.h>
 
//объявление прототипов
 
void concatString(char szTarget[], char szSource[]);
int main(int nArg, char* pszArgs[])
{
    //считываем первую строку...
    char szString1[256];
    cout<<"Vedite stroky #1: ";
    cin.getline(szString1, 128);
    
    //...теперь вторую...
    char szString2[128];
    cout<<"Vedite stroky #2: ";
    cin.getline(szString2, 128);
 
    // присоеденим "-" к первой строке...
    concatString(szString1,"-");
    // strcat(szString1,"-");
 
    // теперь добавим втроую строку
    concatString(szString1,szString2);
    // strcat(szString1,szString2);
    
    // выводим результат на екран
cout<<"\n"<<szString1<<"\n";
return 0;
}
 
// concatString- присоеденяет строку szSource к концу строки szTarget
void concatString(char szTarget[], char szSource[])
{
    //находим конец первой строки
    int targetIndex=0;
    while(szTarget[targetIndex])
    {
        targetIndex++;
    }
    
    // присоеденяем вторую строку к концу первой
    int sourceIndex=0;
    while(szSource[sourceIndex])
    {
        szTarget[targetIndex]=szSource[sourceIndex];
        targetIndex++;
        sourceIndex++;
    }
    // вписываем конец ноль символ
    szTarget[targetIndex]='\0';
}
Ответ компилятора:
Код
1>------ Построение начато: проект: Concatenate, Конфигурация: Debug Win32 ------
1>  Concatenate.cpp
1>c:\users\администратор\desktop\програмирование на с++\concatenate\concatenate\concatenate.cpp(15): error C2065: cout: необъявленный идентификатор
1>c:\users\администратор\desktop\програмирование на с++\concatenate\concatenate\concatenate.cpp(16): error C2065: cin: необъявленный идентификатор
1>c:\users\администратор\desktop\програмирование на с++\concatenate\concatenate\concatenate.cpp(16): error C2228: выражение слева от ".getline" должно представлять класс, структуру или объединение
1>          тип: 'unknown-type'
1>c:\users\администратор\desktop\програмирование на с++\concatenate\concatenate\concatenate.cpp(20): error C2065: cout: необъявленный идентификатор
1>c:\users\администратор\desktop\програмирование на с++\concatenate\concatenate\concatenate.cpp(21): error C2065: cin: необъявленный идентификатор
1>c:\users\администратор\desktop\програмирование на с++\concatenate\concatenate\concatenate.cpp(21): error C2228: выражение слева от ".getline" должно представлять класс, структуру или объединение
1>          тип: 'unknown-type'
1>c:\users\администратор\desktop\програмирование на с++\concatenate\concatenate\concatenate.cpp(32): error C2065: cout: необъявленный идентификатор
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.02.2014, 17:10
Ответы с готовыми решениями:

Управление строками
Есть ли функции в библиотеке Си (не Си++) позволяющие перезаписывать содержимое строк или менять...

Работа со строками. Функции работы со строками
Дана строка символов. В заданном тексте определить позицию первой точки ‘ . ‘.

Реализовать алгоритм работы планировщика. Управление виртуальной памятью. Управление файловой системой
Разработка программы менеджера памяти. Свопинг. Сегментная схема организации памяти. Управление...

Memo1->Lines управление строками.
Народ подскажите,допустим есть матрица 2 на 2,как ее вывести в Memo1 так чтобы получилось не...

3
Заблокирован
14.02.2014, 17:16 2
После заголовков добавьте
C++
1
using namespace std;
0
18902 / 9860 / 2410
Регистрация: 30.01.2014
Сообщений: 17,306
14.02.2014, 20:02 3
Лучший ответ Сообщение было отмечено MultyStepan как решение

Решение

Цитата Сообщение от MultyStepan Посмотреть сообщение
Всем привет!
Я изучаю с++ недавно, в как учебное пособие использую "С++ для чайников".
Книжка, мягко скажем, не очень. Я не говорю, что нужно кидаться сразу на серьезную литературу, но если действительно хочется изучить язык, лучше взять что-нибудь получше. Например вот.

Цитата Сообщение от MultyStepan Посмотреть сообщение
Пример перепечатал с книги, а он не работает!
По возможности укажите не только ошибку ну и почему нужно было сделать так, а не иначе!
Все части стандартной библиотеки С++ содержатся в пространстве имен std. В твоем примере к стандартной библиотеке С++ относятся cout и cin, которые определены в заголовочном файле <iostream>.
Ошибка из-за которой не компилируется - отсутствие указания пространства имен. Решить можно тремя сопособами:
1) как посоветовали выше, - using namespace std ("импортирует" все имена из std в текущую область видимости, в данном случае в глобальное пространство имен);
2) явным указанием принадлежности идентификатора пространству имен - std::cin, std::cout;
3) третий способ - явное указание (опять же для текущей области видимости) для конкретного имени - using std::cin, using std::cout.

Я бы посоветовал делать так:
C++
1
2
3
4
5
6
7
8
9
10
#include<iostream>
//.....
    std::cout<<"Vedite stroky #1: ";
    std::cin.getline(szString1, 128);
    
//.....
 
    std::cout<<"Vedite stroky #2: ";
    std::cin.getline(szString2, 128);
//.....
Импортирование всех имен из std может иногда приводить к не очень приятным и неочевидным ошибкам. Особенно, если такое сделано в заголовочном файле. Говорю по собственному опыту.

Что еще следует помнить:
1) Полное имя идентификатора помещенного в namespace включает в себя имя этого пространства имен.
2) Заголовочные файлы <stdio.h>, <string.h> относятся к стандартной библиотеке Си, в С++ аналоги подключаются как <cstdio> и <cstring> (не путать с <string>) соответственно. Подключив их в С++ мы в праве ожидать, что идентификаторы из них будут доступны через пространство имен std:: (например std :: pow из <cmath>, вместо pow из <math.h>).

Добавлено через 6 минут
Добавлено:
Чтобы не тратить силы на специальное зазубривание (оно само потом запомнится) что где находится, можно пользоваться одним из онлайн справочников.
1
3 / 3 / 4
Регистрация: 08.02.2014
Сообщений: 213
16.02.2014, 12:49  [ТС] 4
спасибо, просто забыл написать using namespace std;
постоянно его использую, но в этот раз забыл!
Огромное спасибо за объяснение для чего оно нужно!
0
16.02.2014, 12:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.02.2014, 12:49
Помогаю со студенческими работами здесь

Работа со строками, заполнить компоненты строками из файла
Привет! Нужна помощь в заполнении формы В общем, есть форма отправки письма. У нее есть 2 функции,...

Работа со строками(операции над строками)
Пусть дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных...

Движение, вращение, управление движением, управление вращением фигуры
Написать программу, выполняющую четыре операции над графическим...

Составить процедуру, которая преобразует исходный текстовый файл FVR со строками различной длины в файл FFIX со строками длиной 80 символов
Составьте процедуру, которая преобразует исходный текстовый файл FVR со строками различной длины в...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru