Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Light Knight
 Аватар для Aaxenon
106 / 29 / 5
Регистрация: 03.06.2010
Сообщений: 361

Строки и указатели с++

22.06.2010, 22:09. Показов 1487. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1. С клавиатуры вводится полный путь к файлу. Напишите программу, которая выделяет из этой строки имя файла
Пример:
C:\windows\system32\activeds.dll
activeds.dll
2. Напишите программу, которая выводит второе слово предложения введенного пользователем.
Пример:
Сидоров Петр Иванович
Петр
3. Напишите программу, которая определяет есть ли в строке введенное пользователем слово.
Пример:
Строка: Организация Объединенных Наций
Слово: нац
Такого слова в строке нет
4. Напишите программу, которая удаляет из строки все пробелы

Буду благодарен
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.06.2010, 22:09
Ответы с готовыми решениями:

Указатели, символьные строки и функции: удалить из строки слово с заданным номером
Функция удаляет из строки слово с заданным номером: не знаю как делать, сделал через swich case но нужно без них

Указатели.Строки и указатели
Вот условия ввода строки:Вводить и обрабатывать строки в цикле до тех пор пока первый символ не пробел Условия обработки строки: ...

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

17
2 / 2 / 1
Регистрация: 08.06.2010
Сообщений: 11
23.06.2010, 11:52
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
4. Напишите программу, которая удаляет из строки все пробелы
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 <stdlib.h>
#include <iostream.h>
 
int main(int argc, char *argv[])
{char S[50];
 char *Ptr, *T;
 cout<<"Stroka: ";
 cin.getline(S, 50);
 Ptr=&S[0];
 while (*Ptr!='\0')
 {if (*Ptr==' ')
  {T=Ptr;
   while (*T!='\0')
   {*T=*(T+1);
    T++;
   }
  }
  else
   Ptr++;
 }
 cout<<"Stroka bez probelov: "<<S<<endl;
 system("PAUSE");
 return 0;
}
1
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
23.06.2010, 12:05
profu, Можно гораздо проще сделать...
C++
1
2
3
4
5
6
7
8
9
10
11
#include <algorithm>
#include <iostream>
#include <string>
 
int main(){
 
    std::string line = "qwe rty !! asd";
    std::remove(line.begin(), line.end(), ' ');
    std::cout << line << std::endl;
    return 0;
}
http://codepad.org/jBjAik3f
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
23.06.2010, 12:30
Задача 1:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "stdafx.h"
#include <iostream>
#include <string>
 
typedef std::string  T_str;
 
T_str  get_filename_from_path(T_str  path)
{
    return path.substr(path.rfind('\\') + 1);
}
 
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Введите маршрут к файлу: "
              << std::endl;
    T_str path;
    std::cin >> path;
    std::cout << "Имя файла: "
              << get_filename_from_path(path)
              << std::endl;
    return 0;
}
Добавлено через 15 минут
ISergey, ваша программа на самом деле только перемещает пробелы в конец строки.
Вот так нужно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <string>
#include <algorithm>
#include <iostream>
 
int main()
{ 
        std::string line = "qwe rty !! asd";
        std::cout << line
                  << std::endl
                  << "line.size() = "
                  << line.size()
                  << std::endl;
        line.assign(line.begin(), std::remove(line.begin(), line.end(), ' '));        
        std::cout << line 
                  << std::endl
                  << "line.size() = "
                  << line.size()
                  << std::endl;
        return 0;
}
1
302 / 160 / 62
Регистрация: 27.02.2010
Сообщений: 317
23.06.2010, 14:23
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
#include<stdlib.h>
#include <iostream>
const int sz=80;
using namespace std;
int proverka (char *buf, char *sl);
int main()
{
    char buf[sz]={'\0'}, slovo[sz]={'\0'};
    cout<<"Vvedite stroku: ";
    cin.getline (buf, sz);
    cout<<"Vvedite slovo: ";
    cin>>slovo;
    if (!proverka(buf, slovo))
        cout<<"slovo ne vhodit v stroku!\n";
    else
        cout<<"slovo vhodit v stroku!\n";
    return 0;
} 
int proverka (char *buf, char *sl)
{
    char *b=buf, *b1=buf, *s=sl;
    while (*b)
    {
        b1=b;
        while (*b1++==*s++)
            ;
        if (*(--s)=='\0')
            return 1;
        s=sl;
        b++;
    }
    return 0;
}
0
Light Knight
 Аватар для Aaxenon
106 / 29 / 5
Регистрация: 03.06.2010
Сообщений: 361
23.06.2010, 14:47  [ТС]
помойму там можно сделать все проще и более простыми командами, ибо задания из начального курса обучения ==
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
23.06.2010, 15:10
Цитата Сообщение от Mr.X Посмотреть сообщение
ISergey, ваша программа на самом деле только перемещает пробелы в конец строки.
Да ну?! Вот так вывод переделал
C++
1
std::cout << '"' << line << '"' << std::endl;
получилось
Code
1
2
~/cpp/strings $ ./rem_sp_iSergey 
"qwerty!!asdasd"
0
Light Knight
 Аватар для Aaxenon
106 / 29 / 5
Регистрация: 03.06.2010
Сообщений: 361
23.06.2010, 16:42  [ТС]
итак...нормально работает только программа profu
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
23.06.2010, 17:13
Цитата Сообщение от easybudda Посмотреть сообщение
Да ну?! Вот так вывод переделал
C++
1
std::cout << '"' << line << '"' << std::endl;
получилось
Code
1
2
~/cpp/strings $ ./rem_sp_iSergey 
"qwerty!!asdasd"
Поправка справедливая. Но это не меняет сути замечания. Алгоритм там применен неверно.

Добавлено через 2 минуты
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
итак...нормально работает только программа profu
А можно привести пример неправильной работы моего решения?
1
Light Knight
 Аватар для Aaxenon
106 / 29 / 5
Регистрация: 03.06.2010
Сообщений: 361
23.06.2010, 17:47  [ТС]
прошу прощения =) работает ^^ остались 2 и 3

Добавлено через 9 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
 
typedef std::string  T_str;
 
T_str  get_filename_from_path(T_str  path)
{
    return path.substr(path.rfind('\\') + 1);
}
 
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Введите маршрут к файлу: "
              << std::endl;
    T_str path;
    std::cin >> path;
    std::cout << "Имя файла: "
              << get_filename_from_path(path)
              << std::endl;
    return 0;
}
а можно приписать коменты? с 4 по 18 строку
0
302 / 160 / 62
Регистрация: 27.02.2010
Сообщений: 317
23.06.2010, 17:50
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
прошу прощения =) работает ^^ остались 2 и 3
А в третьей какие ошибки выдает? Что не так?
0
Light Knight
 Аватар для Aaxenon
106 / 29 / 5
Регистрация: 03.06.2010
Сообщений: 361
23.06.2010, 17:53  [ТС]
Цитата Сообщение от profu Посмотреть сообщение
C++
1
while (*Ptr!='\0')
и что значит \0 ???

Добавлено через 2 минуты
в третьей косяк....если допустим вводится "dgssdg" , а ищем "import" то всё норм, а вот если ищем "ss", то он выдает что такое есть....то есть если последовательность букв встречается в строке, то пишет как будто это есть
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
23.06.2010, 18:14
Цитата Сообщение от Mr.X Посмотреть сообщение
Но это не меняет сути замечания. Алгоритм там применен неверно.
Ага, дошло до меня. Оно не пробелы в конец строки добавляет, там ещё смешнее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <algorithm>
#include <iostream>
#include <string>
 
int main(){
 
        std::string line = "qwe rty !! asd";
        std::cout << "String: \"" << line << "\"\nSize: " << line.size() << std::endl;
        std::remove(line.begin(), line.end(), ' ');
        std::cout << "Result: \"" << line << "\"\nSize: " << line.size() << std::endl;
        return 0;
}

И вообще, я бы лучше по-тупому сделал...
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
 
int main(){
        std::string line = "qwe rty !! asd";
        std::cout << "String: \"" << line << "\"\nSize: " << line.size() << std::endl;
        size_t pos;
        while ( ( pos = line.find(' ') ) != std::string::npos )
            line.erase(pos, 1);
        std::cout << "Result: \"" << line << "\"\nSize: " << line.size() << std::endl;
        return 0;
}
1
Light Knight
 Аватар для Aaxenon
106 / 29 / 5
Регистрация: 03.06.2010
Сообщений: 361
23.06.2010, 18:21  [ТС]
easybudda, можешь сделать чтобы строка вводилась пользователем?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
23.06.2010, 18:31
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
easybudda, можешь сделать чтобы строка вводилась пользователем?
угу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
 
int main(){
        std::string line;
        std::cout << "String: ";
        std::getline(std::cin, line);
        size_t pos;
        while ( ( pos = line.find(' ') ) != std::string::npos )
            line.erase(pos, 1);
        std::cout << "Result: " << line << std::endl;
        return 0;
}
1
Light Knight
 Аватар для Aaxenon
106 / 29 / 5
Регистрация: 03.06.2010
Сообщений: 361
23.06.2010, 20:48  [ТС]
кто нашаманит вторую и третью?

Добавлено через 1 час 53 минуты
ап ап ап
0
37 / 37 / 2
Регистрация: 13.05.2010
Сообщений: 81
23.06.2010, 22:18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <string>
#include <iostream>
using namespace std;
 
 
int main (){
    string s,ss,s1;
    int i=0,chet=0 ;
    getline(cin,s); s+="\n"; // строка
    getline(cin,ss);//  искомое слово
    int nomer; cin>>nomer; // номер слова
    while (s[i]){
    if (s[i]!=' ' ) s1+=s[i];
    else {chet++;}
    if (s[i+1]=='\n') chet++;
    if (( s[i]==' '|| s[i+1]=='\n') && chet==nomer) {cout<<s1<<endl;}
    if (ss==s1) {cout<<s1<<endl; s1.erase();}
    if (s[i]==' ') s1.erase();
    i++;}
    return 0;}
Два в одном, лови

Добавлено через 12 минут
правильнее s1.clear() писать
1
Light Knight
 Аватар для Aaxenon
106 / 29 / 5
Регистрация: 03.06.2010
Сообщений: 361
23.06.2010, 22:26  [ТС]
всем пасиба
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.06.2010, 22:26
Помогаю со студенческими работами здесь

Указатели и строки
Здравствуйте! Помогите решить такую задачу Найти в строке последовательности , состоящие из одного повтопяющегося символа, и заменить его...

Строки и указатели в C++
Проверить правильность расположения в тексте круглых скобок (количество открывающихся и закрывающихся скобок должно совпадать). Пользуясь...

Указатели и строки
1. В коде есть такой кусок: sc = stack.pop(); printf(&quot;#%s %d#&quot;, &amp;sc, sc); sc имеет тип unsigned int, понятно что там хранится...

Указатели и строки
Здравствуйте. Учу указатели (и строки); появилась куча неясных мне моментов, поэтому прошу разъяснения. 1) const char* obj...

Скопировать строку отбрасывая все незначащие пробелы
Недавно начал изучать плюсы. Дошел до темы с указателями и наткнулся на данную задачу. Совсем не понимаю, что как именно правильно решить...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru