2 / 2 / 0
Регистрация: 28.09.2012
Сообщений: 127
1

С# stringstream

06.05.2013, 15:23. Показов 4126. Ответов 26
Метки нет (Все метки)

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
stringstream Sp;
struct Set 
{ 
    vector <string> A; 
    void initialization() 
    { 
        int t=0; 
        for(int i=0; i<=9; i++) 
            for(int j=0; j<=9; j++) 
                if (i != j) 
                    for(int k=0; k<=9; k++) 
                        if (i != k && j!=k) 
                            for(int z=0; z<=9; z++) 
                            { 
                                if (i != z && j != z && k != z) 
                                { 
                                    Sp<<i<<j<<k<<z; 
                                    string a; 
                                    Sp>>a; 
                                    A.push_back(a); 
                                    Sp.clear(); 
                                } 
                            } 
    } 
Set CB; 
CB.initialization();
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.05.2013, 15:23
Ответы с готовыми решениями:

Stringstream C++
Доброго времени суток! Совсем недавно мне понадобились преобразования int to string и наоборот....

Stringstream и оператор >>
Доброго времени. Код: #include &lt;iostream&gt; #include &lt;sstream&gt; using namespace std; int...

Использование stringstream
Добрый день!

Stringstream и считывание по строчно
Есть вот такой список смежности: 2 3 3 2 Как его правильно считать? Мне говорили что это...

26
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
06.05.2013, 15:25 2
C++
1
2
3
4
5
                                    Sp<<i<<j<<k<<z; 
                                    string a; 
                                    Sp>>a; 
                                    A.push_back(a); 
                                    Sp.clear();
>> на += должно хватить.
2
4 / 4 / 1
Регистрация: 05.10.2012
Сообщений: 107
06.05.2013, 15:30 3
Согласен с
phantom96, еще : заменяется на .
При выводи нескольких элементов запятая на + к примеру WriteLine(i + " " )
1
2 / 2 / 0
Регистрация: 28.09.2012
Сообщений: 127
06.05.2013, 15:38  [ТС] 4
Цитата Сообщение от 0_o_Killer_Ivan Посмотреть сообщение
Согласен с
phantom96, еще : заменяется на .
При выводи нескольких элементов запятая на + к примеру WriteLine(i + " " )
А вот
C++
1
stringstream Sp;
как заменить? в С# ведь нет такого...=(
0
4 / 4 / 1
Регистрация: 05.10.2012
Сообщений: 107
06.05.2013, 15:40 5
Эм... это вся особенность синтаксиса C# StringStream Sp;
С# очень чувствителен к регистру будьте внимательны!
1
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
06.05.2013, 15:40 6
Я не уверен что это такое, но либо string Sp либо string[] Sp, [] это для массива.
0
4 / 4 / 1
Регистрация: 05.10.2012
Сообщений: 107
06.05.2013, 15:43 7
phantom96, а я прав ? насчёт StringStream
0
2 / 2 / 0
Регистрация: 28.09.2012
Сообщений: 127
06.05.2013, 15:44  [ТС] 8
Цитата Сообщение от phantom96 Посмотреть сообщение
Я не уверен что это такое, но либо string Sp либо string[] Sp, [] это для массива.
Сделала вот таким образом...на Sp подчеркивает (там где присвоение в цикле идет)
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
public static void Main()
        {
            string[] Sp;
            string hod;
            Console.ReadKey();
        }
 
        public static void initialization(string[] Sp)
        {
            List<string> A = new List<string>();
            int t = 0;
            for (int i = 0; i <= 9; i++)
            {
                for (int j = 0; j <= 9; j++)
                {
                    if (i != j)
                    {
                        for (int k = 0; k <= 9; k++)
                        {
                            if (i != k && j != k)
                            {
                                for (int z = 0; z <= 9; z++)
                                {
                                    if (i != z && j != z && k != z)
                                    {
                                        sp = i+j+k+z;
                                        string a;
                                        sp = a;
                                        A.Add(a);
                                        string b = " ";
                                        sp = b;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
0
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
06.05.2013, 15:45 9
Сейчас попробую сделать проект...
1
17 / 15 / 4
Регистрация: 28.03.2013
Сообщений: 54
06.05.2013, 15:52 10
В структуру передаются только статические элементы: static string str;
И раз уж пошло объявить ее глобальной а то она у вас только в методе Main() работает сейчас
А если очень надо в поток загонять, то MemoryStream MStr = new MemoryStrem();
По-моему достаточно вот так сделать:
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
static string str;
        static void Main(string[] args)
        {
            Set CB = new Set();
            CB.initialization();
            
        }
        struct Set
        {
            List<string> A;
            public void initialization()
            {
                
                int t = 0;
                for (int i = 0; i <= 9; i++)
                    for (int j = 0; j <= 9; j++)
                        if (i != j)
                            for (int k = 0; k <= 9; k++)
                                if (i != k && j != k)
                                    for (int z = 0; z <= 9; z++)
                                    {
                                        if (i != z && j != z && k != z)
                                        {
                                            str = i.ToString() + j.ToString() + k.ToString() + z.ToString();
                                            A.Add(str);
                                            
                                        }
                                    } 
            }
        }
1
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
06.05.2013, 15:57 11
Stringstream - суть очередь, действующая по принципу "раньше вошел - раньше обслужился".
То есть этот код:
C++
1
2
3
Sp<<i<<j<<k<<z; 
string a; 
Sp>>a;
в строковую переменную а запишет только i.
В C# аналог очередей тоже есть, но тут обойтись можно без них вообще. Т.е:
C#
1
A.add(i.ToString());
Если же надо вписать все четыре переменные в одну строку то:
C#
1
A.Add(i.ToString() + " " + j.ToString() + " " + k.ToString() + " " + z.ToString());
За поправки если я где-то не прав отдельное спасибо.
1
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
06.05.2013, 16:08 12
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            List<string> A = new List<string>();
            string Sp;
            int t = 0;
            for (int i = 0; i <= 9; i++)
                for (int j = 0; j <= 9; j++)
                    if (i != j)
                        for (int k = 0; k <= 9; k++)
                            if (i != k && j != k)
                                for (int z = 0; z <= 9; z++)
                                {
                                    if (i != z && j != z && k != z)
                                    {
                                        Sp = i.ToString() + j.ToString() + k.ToString() + z.ToString();
                                        string a;
                                        a = Sp;
                                        A.Add(a);
                                    }
                                }
            foreach (string st in A)
                label1.Text = st;
Код кривой, в label.Text последний элемент A попадает.

Добавлено через 1 минуту
У неё там в коде получается 0123 до 9876, там пробелы ненужны.
1
2 / 2 / 0
Регистрация: 28.09.2012
Сообщений: 127
06.05.2013, 16:15  [ТС] 13
Цитата Сообщение от phantom96 Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            List<string> A = new List<string>();
            string Sp;
            int t = 0;
            for (int i = 0; i <= 9; i++)
                for (int j = 0; j <= 9; j++)
                    if (i != j)
                        for (int k = 0; k <= 9; k++)
                            if (i != k && j != k)
                                for (int z = 0; z <= 9; z++)
                                {
                                    if (i != z && j != z && k != z)
                                    {
                                        Sp = i.ToString() + j.ToString() + k.ToString() + z.ToString();
                                        string a;
                                        a = Sp;
                                        A.Add(a);
                                    }
                                }
            foreach (string st in A)
                label1.Text = st;
Код кривой, в label.Text последний элемент A попадает.

Добавлено через 1 минуту
У неё там в коде получается 0123 до 9876, там пробелы ненужны.
Этот цикл заработал без проблем. А вот следующий не проходит:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static bool pr(string a, string hod,int bull,int cow) 
        { 
            int b = 0, c = 0;
 
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    if (i == j)
                    {
                        b += (hod[j] = a[i]);
                    }
                    else
                    {
                        c += (hod[j] == a[i]);
                    }
                }
            }
            if(b!=bull || c!=cow) 
                return true; 
            return false; 
        }
вроде перевела на С# без ошибок...
0
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
06.05.2013, 16:17 14
c += (hod[j] == a[i]);
Что тут должно произойти?
0
2 / 2 / 0
Регистрация: 28.09.2012
Сообщений: 127
06.05.2013, 16:19  [ТС] 15
Выложу наверное сразу весь проект, вот что получилось:
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace Cows
{
    class Cows
    {
        static string str;
        static string hod;
 
        public static void Main()
        {
            Set CB = new Set();
            CB.initialization();
            Console.ReadKey();
        }
 
        struct Set
        {
            List<string> A;
            public void initialization()
            {
                
                int t = 0;
                for (int i = 0; i <= 9; i++)
                    for (int j = 0; j <= 9; j++)
                        if (i != j)
                            for (int k = 0; k <= 9; k++)
                                if (i != k && j != k)
                                    for (int z = 0; z <= 9; z++)
                                    {
                                        if (i != z && j != z && k != z)
                                        {
                                            str = i.ToString() + j.ToString() + k.ToString() + z.ToString();
                                            A.Add(str);
                                            
                                        }
                                    } 
            }
        }
 
        public static bool pos(char a, string b)
        {
            int n = b.Count();
            for (int i = 0; i < n; i++)
                if (b[i] == a) return true;
            return false;
        } 
 
        public static bool pr(string a, string hod, int bull, int cow) 
        { 
            int b = 0, c = 0;
 
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    if (i == j)
                    {
                        b += (hod[j] = a[i]);
                    }
                    else
                    {
                        c += (hod[j] == a[i]);
                    }
                }
            }
            if(b!=bull || c!=cow) 
                return true; 
            return false; 
        }
 
        public static void ot_hod(string hod, Set CB, List <string> A, int bull, int cow)
        {
            for (int i = 0; i < CB.A.size(); i++)
            {
                if (!CB.pr(CB.A[i], hod, bull, cow))
                {
 
                    CB.A.erase(CB.A.begin() + i);
                    i--;
                }
            }
 
        }
 
        public static string v_hod(Set CB, List<string> A)
        {
            int n_max = 0, r_max = 0;
            return CB.A[rand() % CB.A.size()];
        } 
    }
}
0
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
06.05.2013, 16:20 16
Вы хотите чтобы "с" стал равен "hod[j] == a[i]"?
Тогда так: c += hod[j] + " == " + a[i]
1
2 / 2 / 0
Регистрация: 28.09.2012
Сообщений: 127
06.05.2013, 16:22  [ТС] 17
Цитата Сообщение от phantom96 Посмотреть сообщение
c += (hod[j] == a[i]);
Что тут должно произойти?
Он сравнивает текущий ход и все возможные и проверяет, может ли быть искомое число быков и коров в каждом возможном ходе, если нет то удаляет возможный ход. (это уже делает следующая функция)
0
17 / 15 / 4
Регистрация: 28.03.2013
Сообщений: 54
06.05.2013, 16:27 18
Прошу прощения я вам там накосячил:
C#
1
2
3
4
public void initialization()
            {
                List<string> A = new List<string>();
                int t = 0;
List нужно инициализировать внутри метода initialization, а то там ссылка на ничто получается...

c += (hod[j] == a[i]);
Так на получиться потому что c это (int), а (hod[j] == a[i]) это (bool)
И еще в переменную b будет таким образом просто плюсоваться элемент массива a.
1
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
06.05.2013, 16:31 19
Такс. Мы не можем в int c добавить string = string. Чему должен быть равен c если они равны? И += надо использовать чтобы добавить в конец c что-то.
C#
1
2
3
int c = 0;
c = 1;
c = 2;
После этого с = 2.
C#
1
2
3
int c = 0;
c += 1;
c += 2;
А после этого с будет добавлено 1 и 2.

Добавлено через 1 минуту
Я кажется понял. Если стринги равны надо прибавить к b единицу? А потом оно сверится с bull?
1
2 / 2 / 0
Регистрация: 28.09.2012
Сообщений: 127
06.05.2013, 16:33  [ТС] 20
Цитата Сообщение от phantom96 Посмотреть сообщение
Такс. Мы не можем в int c добавить string = string. Чему должен быть равен c если они равны? И += надо использовать чтобы добавить в конец c что-то.
C#
1
2
3
int c = 0;
c = 1;
c = 2;
После этого с = 2.
C#
1
2
3
int c = 0;
c += 1;
c += 2;
А после этого с будет добавлено 1 и 2.

Добавлено через 1 минуту
Я кажется понял. Если стринги равны надо прибавить к b единицу? А потом оно сверится с bull?
Да, так и должно срабатывать=) и скорее всего вы правы ,тут необходимо использовать конструкцию " += "
0
06.05.2013, 16:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2013, 16:33
Помогаю со студенческими работами здесь

Не подключается stringstream в проект
Здравствуйте, у меня есть небольшой проект к которому подключено несколько сторонних библиотек. Сам...

Конструирование string из stringstream
Я уже довольно долгое время ломаю голову над вот таким вопросом конструирования строки из...

Ипользование класса stringstream
Всем привет. Дело такое: задача одного из моих методов класса запросить вводи имени клиента и его...

Stringstream нечего не выводит
s=wcstod(str, NULL); std::stringstream ss; ss &lt;&lt; s; double u; ss &gt;&gt; u; Почему нечего не...


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

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

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