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

Строка - обрезка, замена, перенос - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.84
4ance
1 / 1 / 0
Регистрация: 02.11.2010
Сообщений: 78
29.01.2011, 16:28     Строка - обрезка, замена, перенос #1
Дана символьная строка "Семенов Виктор Николаевич". Напечатайте ее в виде "В.Н. Семенов". Количество пробелов может быть произвольное.

Думаю ставить точки после обнаруженной заглавной буквы в строке (кроме первого символа - фамилии), но выкидывает ошибку, преобразованный массив в начале заполнен мусором, кроме того, надо потом переносить В. Н. на начало строки - с функциями <cstring> пока не дружу, поэтому хочу сделать с их помощью эту задачу. Промежуток { -33...-64 } - значения заглавных русских букв в моём компиляторе.

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
#include "stdafx.h"
#include <cstring>
#include <iostream>
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "russian" );
 
    char MassivStrokNachalniy[30] = "Семенов Виктор Николаевич";     //Задаём начальный символьный массив
 
    printf ("Исходная строка: %s\n", MassivStrokNachalniy );        //Вывод
 
    for ( int i = 1; i < 30; i++ )
    {
        if ( -33 > MassivStrokNachalniy[ i ] > -64 )
            MassivStrokNachalniy[ i + 1 ] = '.';
            
    }
 
    printf ("Полученная строка: %s\n", MassivStrokNachalniy );
 
    system ("pause");       //Задержать экран
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2011, 16:28     Строка - обрезка, замена, перенос
Посмотрите здесь:

Строки, динамическая память, обрезка строк C++
дана строка, изображающая целое положительное число. Вывести сумму цифр этого числа. Строка должна вводиться с клавиатуры. C++
Строка string и строка char C++
Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо и справа н C++
Строка, замена гласных C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
29.01.2011, 16:32     Строка - обрезка, замена, перенос #2
Цитата Сообщение от 4ance Посмотреть сообщение
if ( -33 > MassivStrokNachalniy[ i ] > -64 )
так нельзя писать
4ance
1 / 1 / 0
Регистрация: 02.11.2010
Сообщений: 78
29.01.2011, 17:40  [ТС]     Строка - обрезка, замена, перенос #3
Цитата Сообщение от sandye51 Посмотреть сообщение
так нельзя писать
Заменю на
C++
1
( MassivStrokNachalniy[ i ] > -64 ) && ( MassivStrokNachalniy[ i ] < -33 )
Теперь В.ктор Н.колаевич выдаёт - как и задумывал.

Добавлено через 29 минут
Далеко от использования функций стринг)))
C++
1
2
3
4
5
6
7
8
9
10
11
int count = -1;
for ( int i = 1; i < 30; i++ )
    {
        if ( ( MassivStrokNachalniy[ i ] > -64 ) && ( MassivStrokNachalniy[ i ] < -33 ) )
        {           
            MassivStrokNachalniy[ i + 1 ] = '.';
            MassivStrokPoluchenniy[ ++count ] = MassivStrokNachalniy[ i ];
            MassivStrokPoluchenniy[ ++count ] = MassivStrokNachalniy[ ++i ];
        }
            
    }
Осталось только фамилию перенести на нужное место.

Добавлено через 35 минут
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
#include "stdafx.h"
#include <cstring>
#include <iostream>
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "russian" );
 
    char MassivStrokNachalniy[30] = "Семенов Виктор Николаевич";     //Задаём начальный символьный массив
    char MassivStrokPoluchenniy[30] = "                          "; //Полученный символьный массив
    char * Razdelitel;
 
    printf ("Исходная строка: %s\n", MassivStrokNachalniy );        //Вывод
    
    int count = -1;
    for ( int i = 1; i < 30; i++ )
    {
        if ( ( MassivStrokNachalniy[ i ] > -64 ) && ( MassivStrokNachalniy[ i ] < -33 ) )
        {           
            MassivStrokNachalniy[ i + 1 ] = '.';
            MassivStrokPoluchenniy[ ++count ] = MassivStrokNachalniy[ i ];
            MassivStrokPoluchenniy[ ++count ] = MassivStrokNachalniy[ ++i ];
        }
            
    }
 
    Razdelitel = strtok( MassivStrokNachalniy , " "); // Берёт Первое слово из строки
 
    strcat( MassivStrokPoluchenniy, Razdelitel );    // Складывает полученный массив с выдранным словом из первой строки (должен)
 
    printf ("Полученная строка: %s\n", MassivStrokPoluchenniy );
 
    system ("pause");       //Задержать экран
    return 0;
}
Функция strcat присоединяет к полученному массиву первое слово из начального массива. Беда в том, что он присоединяет слово к концу результирующего массиива, тк я хочу, чтобы он его вставлял в первое пустое место полученного массива
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
29.01.2011, 18:21     Строка - обрезка, замена, перенос #4
C++
1
2
3
4
5
6
7
8
9
10
11
#include<iostream>
#include<sstream>
using namespace std;
 
int main(){
    string a, b, c;
    getline(cin, a);
    stringstream ss(a);
    ss>>a>>b>>c;
    cout<<b[0]<<". "<<c[0]<<". "<<a;
}
4ance
1 / 1 / 0
Регистрация: 02.11.2010
Сообщений: 78
29.01.2011, 18:37  [ТС]     Строка - обрезка, замена, перенос #5
Цитата Сообщение от igorrr37 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
#include<iostream>
#include<sstream>
using namespace std;
 
int main(){
    string a, b, c;
    getline(cin, a);
    stringstream ss(a);
    ss>>a>>b>>c;
    cout<<b[0]<<". "<<c[0]<<". "<<a;
}
Супер)
И всё таки, почему мой strcat пытается первый байт строки s1 приклеить к последнему байту строки s2?
Yandex
Объявления
29.01.2011, 18:37     Строка - обрезка, замена, перенос
Ответ Создать тему
Опции темы

Текущее время: 05:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru