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

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

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

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

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

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

Вопрос по массивав, "институтский" вопрос. - C++
Готовлюсь к летней сессии по программированию. С++ Есть такая вот задачка (привожу как есть) В документации подобного не...

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

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

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

В каждой строке матрицы найти и вывести минимальный элемент и его номер в строке - C++
/*Дана матрица А. В каждой строке матрицы найти и вывести минимальный элемент и его номер в строке. Вывести полученную матрицу.*/ ...

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

21
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
21.09.2010, 17:20 #2
По-моему да. Но что вам мешает это самому проверить?
0
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
21.09.2010, 17:26  [ТС] #3
Цитата Сообщение от silent_1991 Посмотреть сообщение
По-моему да. Но что вам мешает это самому проверить?
if (*str != '\0') ?
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
21.09.2010, 17:28 #4
Да нет, просто вывести текущий символ и посмотреть, совпадает он с первым или нет.
0
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... ?
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.09.2010, 17:36 #6
Цитата Сообщение от alexsvk Посмотреть сообщение
if (*str != '\0') ?
Дебаггеры на что придуманы? Ставите точку останова на while'е и когда выполнение программы на ней остановится смотрите на что указывает str.
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
21.09.2010, 17:36 #7
break в данном случае выйдет только из while
Разумеется.
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.09.2010, 17:37 #8
Цитата Сообщение от alexsvk Посмотреть сообщение
break в данном случае выйдет только из while и будет проверка i != strlen(str)) //number... ?
Да, break прерывает один цикл, внутри которого он находится.

Не по теме:

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

0
easybudda
Модератор
Эксперт CЭксперт С++
9681 / 5631 / 954
Регистрация: 25.07.2009
Сообщений: 10,808
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");
0
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(), то отлично работает, но в случае включения последующих инструкций после ввода - курсор и никакой реакции на нажатия
0
easybudda
Модератор
Эксперт CЭксперт С++
9681 / 5631 / 954
Регистрация: 25.07.2009
Сообщений: 10,808
21.09.2010, 22:01 #11
Цитата Сообщение от alexsvk Посмотреть сообщение
ComNum num_1(str);
Это что?
0
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
21.09.2010, 22:04  [ТС] #12
Цитата Сообщение от easybudda Посмотреть сообщение
Это что?
определение объекта
0
easybudda
Модератор
Эксперт CЭксперт С++
9681 / 5631 / 954
Регистрация: 25.07.2009
Сообщений: 10,808
21.09.2010, 22:15 #13
Цитата Сообщение от alexsvk Посмотреть сообщение
определение объекта
Ну а выложить его скромность не позволяет? Я так понял - тут оно и виснет, не?
0
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;
}
0
easybudda
Модератор
Эксперт CЭксперт С++
9681 / 5631 / 954
Регистрация: 25.07.2009
Сообщений: 10,808
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);
и далее по тексту (что я закомментировал) - это что за танцы с бубном?
0
21.09.2010, 23:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2010, 23:34
Привет! Вот еще темы с ответами:

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

В заданной строке определить количество слов (в строке может содержаться несколько пробелов подряд). - C++
В заданной строке определить количество слов (в строке может содержаться несколько пробелов подряд).

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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