10 / 10 / 2
Регистрация: 26.09.2009
Сообщений: 93
1

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

25.11.2009, 00:37. Показов 42742. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если кто-то сможет помогите пожалуйста.
Дана следующая задачка:
Написать программу, которая считывает английский текст из файла и выводит его на экран, заменив прописной каждую первую букву слов, начинающихся с гласной буквы.
Вот код:
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
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
 
namespace LabRab7
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                StreamReader eng = new StreamReader("eng.txt");
                string st = eng.ReadToEnd();
                Console.WriteLine("Начальная строка:\n");
                Console.WriteLine(st + "\n");
 
                Console.WriteLine("Полученная строка:\n");
                string[] mas = st.Split(' ');
                for (int i = 0; i < mas.Length; i++)
                {
                    if (Convert.ToChar(mas[i].Substring(0, 1)) == 'o')
                    {
                        mas[i].Substring(0, 1).Replace('o','O');
                    }
                    Console.Write(mas[i] + " ");
                }
                Console.ReadLine();
                eng.Close();
            }
 
            catch (FileNotFoundException e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine("Проверьте правильность имени файла!");
                Console.ReadLine();
            }
            catch
            {
                Console.WriteLine("Неопознанное исключение!");
                Console.ReadLine();
            }
        }
    }
}
Для начала я решил запустить программу которая заменяла бы хотя бы одну букву. За эту замену отвечает вот этот кусок. Замена буквы о на О.
C#
1
2
3
4
                    if (Convert.ToChar(mas[i].Substring(0, 1)) == 'o')
                    {
                        mas[i].Substring(0, 1).Replace('o','O');
                    }
Я тут как бы присваиваю каждое слово из предложения элементу массива. Элемент разбиваю на символы. И если первый элемент символа приравнивается к гласной, то я его заменяю.
Но она ее не заменяет. Кто-нибудь может подсказать почему это может быть?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.11.2009, 00:37
Ответы с готовыми решениями:

Замена символа в строке
Найти и заменить определенный символ в строке, введенной с клавиатуры. Программа должна...

Замена символа в строке
дана строка вида:10*2+X^2; мне нужно по ходу действий заменить X на число из формы, которое может...

Замена определенного символа в строке
Добрый день! Задача такая: есть строка вида &quot;00000001&quot; Если первые два символа &quot;00&quot;, то заменить...

Замена символа в строке по индексу
Доброе утро. Есть строка типа &quot;347F93001850767F008000FEFFFFFFFF&quot;, из нее через Substring...

21
46 / 46 / 3
Регистрация: 18.10.2009
Сообщений: 119
25.11.2009, 02:47 2
строка неизменяемый тип данных
поля на классе:
static bool[] lookup;
в функции пишешь
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const int diff = (int)'A' - (int)'a'; //разница в кодах между заглавной и строчной буквой. Для английского алфавита постоянна
lookup = new char[(int)'z'+1];//длина массива=код символа 'z' +1
lookup['a'] = true;
lookup['e'] = true;
//....
string[] mas = st.Split(' ');
                for (int i = 0; i < mas.Length; i++)
                {
                    if (Convert.ToChar(mas[i].Substring(0, 1)) == 'o')
                    {
var word = mas[i];
 
                        if(word[0]<lookup.Length && lookup[mas[i][0]]){
mas[i] = (char)((int)word[0]+diff)//0 символ + diff т.е. превращение его в заглавную букву
 + word.Substring(1);//подстрока начиная с 1 символа
}
                    }
                }
string res = string.Join(" ",mas);
Console.WriteLine(res);
0
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
25.11.2009, 02:54 3
А зачем считывать что-то в строку? Почему бы сразу не преобразовывать по ходу считывания?
0
46 / 46 / 3
Регистрация: 18.10.2009
Сообщений: 119
25.11.2009, 03:05 4
Есть желание объяснить как с байтами работать? А если там не однобайтовая кодировка? В крайнем случае можно построчно читать и прогонять над строкой алгоритм.
0
50 / 31 / 1
Регистрация: 08.10.2009
Сообщений: 144
25.11.2009, 07:52 5
Можно пример файла? А то так как то не получается.

Добавлено через 1 час 5 минут
Может быть я чего-то не понимаю, но у меня получилось так...
C#
1
string t = st.Replace(" o", " O").Replace(" i", " I").Replace(" e", " E").Replace(" u", " U").Replace(" a", " A");
3
10 / 10 / 2
Регистрация: 26.09.2009
Сообщений: 93
25.11.2009, 13:29  [ТС] 6
Это было содержимое файла:
To obtain a more specific response, you may conduct a search by using certain
flags.
Впринципе, это
C#
1
string str = st.Replace(" a", " A").Replace(" e", " E").Replace(" i", " I").Replace(" o", " O").Replace(" u", " U").Replace(" y", " Y");
работает как надо. Спасибо.
0
46 / 46 / 3
Регистрация: 18.10.2009
Сообщений: 119
25.11.2009, 14:04 7
Цитата Сообщение от posthuman Посмотреть сообщение
Это было содержимое файла:
To obtain a more specific response, you may conduct a search by using certain
flags.
Впринципе, это
C#
1
string str = st.Replace(" a", " A").Replace(" e", " E").Replace(" i", " I").Replace(" o", " O").Replace(" u", " U").Replace(" y", " Y");
работает как надо. Спасибо.
только в 10 раз медленнее )
0
50 / 31 / 1
Регистрация: 08.10.2009
Сообщений: 144
25.11.2009, 14:18 8
Цитата Сообщение от Goldywhite Посмотреть сообщение
только в 10 раз медленнее )
Согласен что с точки зрения эффективности не очень.
Но требований по быстродействию не было!
0
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
25.11.2009, 15:58 9
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
using System;
using System.IO;
 
public class MainClass
{
    public static bool IsVowel(char c)
    {
        char[] arr = {'e','y','u','i','o','a'};
        foreach(char temp in arr)
            if(temp == c) return true;
        return false;
    }
        //-------------------------------------------------------------------
    public static int Main(string[] args) 
        {
        StreamReader file_stream = new StreamReader("eng.txt");
        int ch = file_stream.Read();
 
        while(ch != -1)
        {
            if( Char.IsLetterOrDigit(Convert.ToChar(ch)) )
                {
                if( IsVowel(Convert.ToChar(ch)) )
                    ch = Char.ToUpper( Convert.ToChar(ch) );
 
                                //здесь проверка не совсем корректна, надо бы сразу выпрыгнуть из цикла при ch == -1
                while( Char.IsLetterOrDigit(Convert.ToChar(ch)) && ch != -1 )
                {   
                    Console.Write(Convert.ToChar(ch));
                    ch = file_stream.Read();
                }
                }
            Console.Write(Convert.ToChar(ch));
            ch = file_stream.Read();
        }
        
        return 0; 
        }
 }
0
46 / 46 / 3
Регистрация: 18.10.2009
Сообщений: 119
25.11.2009, 17:09 10
Очень медленный способ. Читать по одному чару из стрима... Это пипец.
0
50 / 31 / 1
Регистрация: 08.10.2009
Сообщений: 144
25.11.2009, 17:17 11
Цитата Сообщение от Goldywhite Посмотреть сообщение
Очень медленный способ. Читать по одному чару из стрима... Это пипец.
У меня возник другой вопрос:
А не будет ли данный алгоритм заменять ВСЕ гласные?
У нас ведь по условию, ТОЛЬКО в начале слова...
0
46 / 46 / 3
Регистрация: 18.10.2009
Сообщений: 119
25.11.2009, 18:00 12
я на алгоритм не смотрел. Сейчас глянул - конечно все заменит.
0
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
25.11.2009, 18:31 13
Цитата Сообщение от Goldywhite Посмотреть сообщение
я на алгоритм не смотрел. Сейчас глянул - конечно все заменит.
Это о каком алгоритме сейчас идёт речь?
0
50 / 31 / 1
Регистрация: 08.10.2009
Сообщений: 144
25.11.2009, 18:33 14
Цитата Сообщение от rangerx Посмотреть сообщение
Это о каком алгоритме сейчас идёт речь?
О твоем!
0
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
25.11.2009, 18:54 15
Цитата Сообщение от IronWeb Посмотреть сообщение
О твоем!
Работает на ура, правда медленно
0
50 / 31 / 1
Регистрация: 08.10.2009
Сообщений: 144
25.11.2009, 19:14 16
Цитата Сообщение от rangerx Посмотреть сообщение
Работает на ура, правда медленно
А заменяет все гласные или только те что в начале слова?
0
10 / 10 / 2
Регистрация: 26.09.2009
Сообщений: 93
25.11.2009, 19:41  [ТС] 17
только вначале слова, как и надо. конечно странно как это работает, но все таки получилось.
0
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
25.11.2009, 19:45 18
Цитата Сообщение от IronWeb Посмотреть сообщение
А заменяет все гласные или только те что в начале слова?
Только те, что в начале слова. Если ты внимательно посмотришь код, то увидишь там два цикла главный и вложенный. Вот как раз вложенный и проматывает всё слово до конца(игнорирует все символы текущего слова).
0
50 / 31 / 1
Регистрация: 08.10.2009
Сообщений: 144
26.11.2009, 06:48 19
А можно ли данную задачу решить с помощью System.Text.RegularExpressions.Regex?
ИМХО, если это возможно то такое решение было бы и быстрым и в то же время простым!
0
46 / 46 / 3
Регистрация: 18.10.2009
Сообщений: 119
26.11.2009, 15:26 20
Цитата Сообщение от IronWeb Посмотреть сообщение
А можно ли данную задачу решить с помощью System.Text.RegularExpressions.Regex?
ИМХО, если это возможно то такое решение было бы и быстрым и в то же время простым!
Можно. Но решение будет медленным, хотя простым.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2009, 15:26
Помогаю со студенческими работами здесь

Замена символа цифрами в строке
поскажите пожалуйста как заменить в строке символы цифрами? например: &quot;smart &quot; если s-01 ...

Замена только одного символа в строке
Нужно заменить только первый символ в строке, и только в том случае, если он вообще там есть. Суть...

Замена символа в строке следующим по коду символом
Ребята подскажите нубу , каким методом (самым простым и начальным) произвести замену символа на...

Замена символа в строке на несколько элементов массива
Имеется массив char keys = { &quot;z&quot;, &quot;l&quot;, &quot;4&quot;, &quot;w&quot;, &quot;z&quot;, &quot;y&quot;, &quot;g&quot;, ... }; Требуется заменить...

Замена символа в строке начиная со второго найденного
Приветствую всех форумчан! При изучении работы со строками возник такой вопрос: имеется некая...

Замена символа в строке на другой символ из массива символов
Здравствуйте. Помогите пожалуйста. Пишу однозвучный шифр и возникла проблема. В textBox...


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

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

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