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

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

Войти
Регистрация
Восстановить пароль
 
 
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
#1

Вопрос о строке - C++

21.09.2010, 17:18. Просмотров 1061. Ответов 21
Метки нет (Все метки)

Добрый день!
Вводится строка и передаётся как параметр.
При использовании следующего кода:
C++
1
2
3
4
5
6
7
while(str)
    {    
        if (*str == '+')
            break;
        *(str++);
        i++;
    }
проверка будет идти от начала (т.е. указатель будет стоять в начале строки)?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2010, 17:18     Вопрос о строке
Посмотрите здесь:

Найти все цифры в строке. каждую цифру напечатать в отдельной строке - C++
Помогите пожалуйста

Найти число пробелов в строке и заменить их на номер по порядку в исходной строке - C++
Задание: Во введенной пользователем строке найти число пробелов и заменить все пробелы на их номер по порядкув исходной строке. Например...

Работа с массивами. Поиск наименьшего числа в строке и наибольшего в строке - C++
Добрый вечер. Надо найти наименьшее число в строке и наибольшее в столбце. Примерно вот так должно искать. потом надо собрать новый...

В строке заменить каждый символ «!» числом, равным индексу этого символа в строке - C++
В заданной строке заменить каждый символ «!» числом, равным индексу этого символа в строке. Сделал просто замену символа на любой ...

Поменять местами наибольший элемент в первой строке матрицы с наименьшим элементом в третьей строке - C++
В двумерном массив заменить местами наибольший элемент в первой строчке с наименьшим элементом в третьем

Дан двумерный массив. найти количество элементов в каждой строке, меньших диагонального в этой строке - C++
1.Сформировать квадратную матрицу 000001 000020 000300 0n-10000 n00000 2.Дан двумерный массив. найти количество элементов в...

Написать програму которая заменяет все Enter и Tab в строке str1 на сымволи '\n' и '\t' в строке str2. - C++
а если не сложно то можно функцию

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
21.09.2010, 17:20     Вопрос о строке #2
По-моему да. Но что вам мешает это самому проверить?
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
21.09.2010, 17:26  [ТС]     Вопрос о строке #3
Цитата Сообщение от silent_1991 Посмотреть сообщение
По-моему да. Но что вам мешает это самому проверить?
if (*str != '\0') ?
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
21.09.2010, 17:28     Вопрос о строке #4
Да нет, просто вывести текущий символ и посмотреть, совпадает он с первым или нет.
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
21.09.2010, 17:34  [ТС]     Вопрос о строке #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if(i == strlen(str)) // number consists from either im or real part
    {
        i = 0;
        while(str)
        {    
            if (*str == 'i')
                break;
            *(str++);
            i++;
        }
 
        if(i != strlen(str)) // number consits only from Im part
            Rl = 0.0; 
    }
ещё вопрос: break в данном случае выйдет только из while и будет проверка i != strlen(str)) //number... ?
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.09.2010, 17:36     Вопрос о строке #6
Цитата Сообщение от alexsvk Посмотреть сообщение
if (*str != '\0') ?
Дебаггеры на что придуманы? Ставите точку останова на while'е и когда выполнение программы на ней остановится смотрите на что указывает str.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
21.09.2010, 17:36     Вопрос о строке #7
break в данном случае выйдет только из while
Разумеется.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.09.2010, 17:37     Вопрос о строке #8
Цитата Сообщение от alexsvk Посмотреть сообщение
break в данном случае выйдет только из while и будет проверка i != strlen(str)) //number... ?
Да, break прерывает один цикл, внутри которого он находится.

Не по теме:

Читайте литературу.

easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,506
21.09.2010, 17:57     Вопрос о строке #9
Цитата Сообщение от alexsvk Посмотреть сообщение
Добрый день!
Вводится строка и передаётся как параметр.
При использовании следующего кода:
C++
1
2
3
4
5
6
7
while(str)
    {    
        if (*str == '+')
            break;
        *(str++);
        i++;
    }
проверка будет идти от начала (т.е. указатель будет стоять в начале строки)?
На самом деле оно просто зациклится, если только вместо str NULL не передать, или остановится, если в строке '+' встретит, или вылетит с ошибкой, когда за пределы str выйдет... На сколько я понял - нужно посчитать количество символов в строке до символа '+' (если он там есть)?
C
1
2
3
4
5
6
7
8
#include <string.h>
#include <stdio.h>
...
char * p;
if ( p = strchr(str, '+') )
  printf("%d символов в строке перед '+'\n", p - str);
else
  printf("Символ '+' не найден\n");
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
21.09.2010, 20:59  [ТС]     Вопрос о строке #10
Цитата Сообщение от easybudda Посмотреть сообщение
На самом деле оно просто зациклится, если только вместо str NULL не передать, или остановится, если в строке '+' встретит, или вылетит с ошибкой, когда за пределы str выйдет... На сколько я понял - нужно посчитать количество символов в строке до символа '+' (если он там есть)?
C
1
2
3
4
5
6
7
8
#include <string.h>
#include <stdio.h>
...
char * p;
if ( p = strchr(str, '+') )
  printf("%d символов в строке перед '+'\n", p - str);
else
  printf("Символ '+' не найден\n");
да нет, так я узнаю, из 2-х или одного элементов состоит комплексное число, но спасибо.
Ещё один вопрос сейчас встретился:
C++
1
2
3
4
5
    cout<<"Enter the 1st expression: ";
    cin.getline(str,79);
    
    ComNum num_1(str);
//    strcpy(str,"");
Если комментирую всё после cin.getline(), то отлично работает, но в случае включения последующих инструкций после ввода - курсор и никакой реакции на нажатия
easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,506
21.09.2010, 22:01     Вопрос о строке #11
Цитата Сообщение от alexsvk Посмотреть сообщение
ComNum num_1(str);
Это что?
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
21.09.2010, 22:04  [ТС]     Вопрос о строке #12
Цитата Сообщение от easybudda Посмотреть сообщение
Это что?
определение объекта
easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,506
21.09.2010, 22:15     Вопрос о строке #13
Цитата Сообщение от alexsvk Посмотреть сообщение
определение объекта
Ну а выложить его скромность не позволяет? Я так понял - тут оно и виснет, не?
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
21.09.2010, 22:31  [ТС]     Вопрос о строке #14
Цитата Сообщение от easybudda Посмотреть сообщение
Ну а выложить его скромность не позволяет? Я так понял - тут оно и виснет, не?
виснет при любой инструкции после getline
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
// lr1.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
 
 
int main(int argc, char* argv[])
{
    char str [80];
 
    cout.width(strlen("Examples of expressions:")/2 + 40);
    cout<<"Examples of expressions:"<<endl;
    cout.width(strlen("2+3i")/2 + 40);
    cout<<"2+3i"<<endl;
    cout.width(strlen("2") + 40);
    cout<<2<<endl; 
    cout.width(strlen("0i")/2 + 40);
    cout<<"0i"<<endl;
    cout.width(strlen("2-1i")/2 + 40);
    cout<<"2-1i"<<endl;
    
    cout<<"Enter the 1st expression: ";
    cin.getline(str,79);
    cout<<'a';
    ComNum num_1(str);
//    strcpy(str,"");
//    cout<<str<<"ya"<<endl;
 
/*    cout<<"Enter the 1st expression: ";
    cin.getline(str,79);
    ComNum num_2(str);*/
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2010, 23:34     Вопрос о строке
Еще ссылки по теме:

Если минимальный элемент матрицы стоит в первой строке, то элементы, стоящие в строке за ним, заменить нулями - C++
Задана матрица С(5,5). Если минимальный элемент стоит в первой строке, то все элементы стоящие в строке за ним, заменить нулями. Какие...

Массивы. Определить количество элементов в каждой строке матрицы А, модуль которых равняется порядковому номеру элемента в строке - C++
дано матрицу А размером 4х5. определить количество элементов в каждой строке матрицы А, модуль которых равняется порядковому номеру...

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

Выяснить, есть ли в данной строке кома, после которой дальше в строке есть тире - C++
Дана строка s. a) Выяснить, есть ли в данной строке кома, после которой дальше в строке есть тире; b) Найти первую по порядку...

Вопрос по if, else? - C++
Как сделать так чтобы программа работала по таком принципу: 1. Проверяется первое условие если оно верно - выводится оператор за ним. ...


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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,506
21.09.2010, 23:34     Вопрос о строке #15
alexsvk, да что ж из Вас всё клещами-то тянуть надо? Объявление/определение класса ComNum где? В его же конструкторе программа виснет...
Вот так всё работает, правда, толка от такого класса не много...
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
#include <iostream>
#include <cstring>
 
class ComNum {
    char * str;
public:
    ComNum(const char * _str){
        size_t len = strlen(_str);
        str = new char [ len + 1 ];
        strcpy(str, _str);
    }
    ~ComNum(){
        delete [] str;
    }
    friend std::ostream & operator << (std::ostream & ost, const ComNum & c){
        ost << c.str;
        return ost;
    }
};
 
int main(int argc, char* argv[])
{
    char str [80];
 
    //cout.width(strlen("Examples of expressions:")/2 + 40);
    std::cout << "Examples of expressions:" << std::endl;
    //cout.width(strlen("2+3i")/2 + 40);
    //cout<<"2+3i"<<endl;
    //cout.width(strlen("2") + 40);
    //cout<<2<<endl; 
    //cout.width(strlen("0i")/2 + 40);
    //cout<<"0i"<<endl;
    //cout.width(strlen("2-1i")/2 + 40);
    //cout<<"2-1i"<<endl;
    
    std::cout << "Enter the 1st expression: ";
    std::cin.getline(str,79);
//    cout<<'a';
    ComNum num_1(str);
//    strcpy(str,"");
//    cout<<str<<"ya"<<endl;
 
    std::cout << "Enter the 2nd expression: ";
    std::cin.getline(str,79);
    ComNum num_2(str);
    
    std::cout << "First: " << num_1 << "\nSecond: " << num_2 << std::endl;
    return 0;
}
И кстати
Цитата Сообщение от alexsvk Посмотреть сообщение
cout.width(strlen("2+3i")/2 + 40);
и далее по тексту (что я закомментировал) - это что за танцы с бубном?
Yandex
Объявления
21.09.2010, 23:34     Вопрос о строке
Ответ Создать тему
Опции темы

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