Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 23.11.2014
Сообщений: 3
1

Добавление в строку экранирующего символа '\' перед каждой кавычкой в строке

23.11.2014, 21:54. Показов 2581. Ответов 2
Метки нет (Все метки)

Помогите пожалуйста!)
Нужно написать класс StringFormatter с методом string SafeString( string s ), который во входной строке экранирует все одинарные и двойные кавычки (добавляет перед ними символ ‘\’)

мои старания не особо увенчались успехом
не пойму почему не работает вставка символа в нулевую позицию
и как правильно задать условие
так как на if(s[0]=='"' || s[0]== ''') <- компилятор ругается
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
 
//
 
 
public class StringFormatter
    {
        private string s;
        public void SetString(string str)
        {
            s = str;
        }
 
        public string SafeString()
        {
            if(s[0]=='"')
            {
              s.Insert(0,"\\");
            }
 
 
            for (int i = 1; i < s.Length ; i++)
            {
                if (s[i] == '"')
                {
                    s = s.Insert(i, "\\");
                    i++;
                }
              
 
            }
 
 
            return s;
        }
    }
класс рабочий
кавычки берет
вот только не обрабатывает кавычку в начале
и как с одинарной кавычкой в условии быть не знаю
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2014, 21:54
Ответы с готовыми решениями:

Добавление символа к каждой строке файла, объединение получившихся строк в одну и последующее её разбиение
Здравствуйте! Имеется txt файл, в нем данные представлены в столбце в следующем виде: ...

Если в строке нет символа +, то оставить строку без изменений, иначе каждую из цифр перед символом + заменять на *
Ввести символьный массив из 12 символов. Если в тексте нет символа +, то оставить без изменений, в...

Определить последнее вхождение символа “р” в строке и вывести строку, начиная с первого символа и до последнего “р” в строке
Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить последнее вхождение символа...

Строки. Перед (после) каждого вхождения символа C в строку S1 вставить строку S2
Даны строки S1, S2 и символ C. Перед (после) каждого вхождения символа C в строку S1 вставить...

2
137 / 131 / 87
Регистрация: 18.05.2013
Сообщений: 399
23.11.2014, 23:50 2
Kolizei, у вас ошибка в 15 строке, должно быть так:
C#
1
s=s.Insert(0,"\\");
но тогда возникнет новая ошибка: т.к. у вас следующий цикл начинается с 1 (а 1 символом будет теперь кавычка), то в начале выведется 2 слэша. Для того, чтобы указать одинарную кавычку, используйте экранирование:
C#
1
if (c == '"' || c == '\'')
Вообще, в методе SafeString нужен только один цикл:
C#
1
2
3
4
5
6
7
8
9
10
11
12
    public string SafeString()
    {
            for (int i = 0; i < s.Length ; i++)
            {
                if (s[i] == '"' || s[i]=='\'')
                {
                    s = s.Insert(i, "\\");
                    i++;
                }  
            }
        return s;
    }
И еще, для инициализации полей существует конструктор, т.е. вместо метода SetString(string str) нужно записать:
C#
1
2
3
4
public StringFormatter(string str)
    {
        s = str;
    }
0
16 / 16 / 9
Регистрация: 08.09.2014
Сообщений: 66
24.11.2014, 02:09 3
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Task_CyberForum_2
    {
        public class StringFormatter
        {
            private string _s;
 
            public string S
            {
                get { return _s; }
                set { _s = value; }
            }
 
            public string SafeString()
            {
                // поиск нужно начинать с 0 значения в строке 
                for (int i = 0; i < _s.Length; i++)
                {
                    // вот так указать проверку на " и '
                    if (_s[i] == '"' || _s[i] == '\'')
                    {
                        _s = _s.Insert(i, "\\");
                        i++;
                    }
                }
                return _s;
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                StringFormatter testString = new StringFormatter();
                testString.S = Console.ReadLine();
                Console.WriteLine(testString.SafeString());
                Console.ReadLine();
            }
        }
    }
вроде в коментах указал.
и вместо метода SetString я использовал свойство S
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2014, 02:09

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Перед каждым вхождением заданного символа в строку S вставить строку S0
Дан символ C и строки S, S0 . Перед каждым вхождением символа C в строку S вставить строку S0 .

Перед (после) каждого вхождения символа C в строку S1 вставить строку S2
Даны строки S1, S2 и символ C. Перед (после) каждого вхождения символа C в строку S1 вставить...

Дан символ C и строки S, S0. Перед каждым вхождением символа C в строку S вставить строку S0
Дан символ C и строки S, S0. Перед каждым вхождением символа C в строку S вставить строку S0.

Дан символ C и строки S, S0. Перед каждым вхождением символа C в строку S вставить строку S0
Выполните следующие задания на тему «Обработка строк с помощью стандартных функций. Поиск и...


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

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

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