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

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

Восстановить пароль Регистрация
 
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
22.06.2010, 22:09     Строки и указатели с++ #1
1. С клавиатуры вводится полный путь к файлу. Напишите программу, которая выделяет из этой строки имя файла
Пример:
C:\windows\system32\activeds.dll
activeds.dll
2. Напишите программу, которая выводит второе слово предложения введенного пользователем.
Пример:
Сидоров Петр Иванович
Петр
3. Напишите программу, которая определяет есть ли в строке введенное пользователем слово.
Пример:
Строка: Организация Объединенных Наций
Слово: нац
Такого слова в строке нет
4. Напишите программу, которая удаляет из строки все пробелы

Буду благодарен
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2010, 22:09     Строки и указатели с++
Посмотрите здесь:

Строки и указатели C++
C++ Строки и указатели........
Указатели и строки C++
C++ Указатели на строки
C++ Указатели и строки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
profu
2 / 2 / 0
Регистрация: 08.06.2010
Сообщений: 11
23.06.2010, 11:52     Строки и указатели с++ #2
Цитата Сообщение от 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;
}
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
23.06.2010, 12:05     Строки и указатели с++ #3
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
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
23.06.2010, 12:30     Строки и указатели с++ #4
Задача 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;
}
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
23.06.2010, 14:23     Строки и указатели с++ #5
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;
}
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
23.06.2010, 14:47  [ТС]     Строки и указатели с++ #6
помойму там можно сделать все проще и более простыми командами, ибо задания из начального курса обучения ==
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.06.2010, 15:10     Строки и указатели с++ #7
Цитата Сообщение от Mr.X Посмотреть сообщение
ISergey, ваша программа на самом деле только перемещает пробелы в конец строки.
Да ну?! Вот так вывод переделал
C++
1
std::cout << '"' << line << '"' << std::endl;
получилось
Код
~/cpp/strings $ ./rem_sp_iSergey 
"qwerty!!asdasd"
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
23.06.2010, 16:42  [ТС]     Строки и указатели с++ #8
итак...нормально работает только программа profu
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
23.06.2010, 17:13     Строки и указатели с++ #9
Цитата Сообщение от easybudda Посмотреть сообщение
Да ну?! Вот так вывод переделал
C++
1
std::cout << '"' << line << '"' << std::endl;
получилось
Код
~/cpp/strings $ ./rem_sp_iSergey 
"qwerty!!asdasd"
Поправка справедливая. Но это не меняет сути замечания. Алгоритм там применен неверно.

Добавлено через 2 минуты
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
итак...нормально работает только программа profu
А можно привести пример неправильной работы моего решения?
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
23.06.2010, 17:47  [ТС]     Строки и указатели с++ #10
прошу прощения =) работает ^^ остались 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 строку
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
23.06.2010, 17:50     Строки и указатели с++ #11
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
прошу прощения =) работает ^^ остались 2 и 3
А в третьей какие ошибки выдает? Что не так?
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
23.06.2010, 17:53  [ТС]     Строки и указатели с++ #12
Цитата Сообщение от profu Посмотреть сообщение
C++
1
while (*Ptr!='\0')
и что значит \0 ???

Добавлено через 2 минуты
в третьей косяк....если допустим вводится "dgssdg" , а ищем "import" то всё норм, а вот если ищем "ss", то он выдает что такое есть....то есть если последовательность букв встречается в строке, то пишет как будто это есть
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.06.2010, 18:14     Строки и указатели с++ #13
Цитата Сообщение от 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;
}
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
23.06.2010, 18:21  [ТС]     Строки и указатели с++ #14
easybudda, можешь сделать чтобы строка вводилась пользователем?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.06.2010, 18:31     Строки и указатели с++ #15
Цитата Сообщение от 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;
}
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
23.06.2010, 20:48  [ТС]     Строки и указатели с++ #16
кто нашаманит вторую и третью?

Добавлено через 1 час 53 минуты
ап ап ап
edd
36 / 36 / 0
Регистрация: 13.05.2010
Сообщений: 81
23.06.2010, 22:18     Строки и указатели с++ #17
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() писать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2010, 22:26     Строки и указатели с++
Еще ссылки по теме:

C++ Указатели и строки
Строки и указатели в C++ C++
C++ Указатели на строки

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

Или воспользуйтесь поиском по форуму:
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
23.06.2010, 22:26  [ТС]     Строки и указатели с++ #18
всем пасиба
Yandex
Объявления
23.06.2010, 22:26     Строки и указатели с++
Ответ Создать тему
Опции темы

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