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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 178
#1

Подсчёт первого слова в строке и задача на перестановку - C++

09.11.2012, 23:25. Просмотров 457. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
 
using namespace std;
 
int main(){ 
setlocale(0,"");
        int i=0;
        char s[1024] = {' '},*w,*a;
        cin.get(s, 1024);
        a=strtok(s, " ");
        for(w = strtok(s, " \n\t"); w; w = strtok(NULL, " \n\t"))
            if (w == a)
        i++;
        cout <<"Слово "<<a<<" повторяется "<<i<<" раз";
        cin.get();
        cin.get();
        return 0;
}
Всё вроди бы так ну вывод всегда повторяется 1 раз, почему так?
и ещё одна задача, к примеру есть строка tuchkafivet
и 2 строка tuhcka medved pila в выводе должно написать что если поменять 2 буквы в данном случае с и h из второй строчки то получится слово из первой, но не больше 2 букв можно менять
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
#include <iostream>
#include <stdio.h>
#include <string.h>
 
using namespace std;
 
int main(){
    setlocale(0, "");
    char a[10],str[1024] = {' '};
    cout << "Введите последовательность А\n";
    for(int j= 0; j <10; j++)
        cin >>a[j];
    cout<<"Введите Sn\n";
    cin.get(str, 1024);
    for(int i = 0; i < 1024; i++)
    for(int j = 0; j < 10; j++)
    {
        if((str[i] == a[j+1] && a[j] == str[i-1])){
            cout << "Нужно поменять местами буквы "<<str[i]<<" и "<<str[i+1];
        
        }}
    cin.get();
    cin.get();
    return 0;
}
здесь почему то просто проскакивает и переходит к завершению возвращает 0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2012, 23:25     Подсчёт первого слова в строке и задача на перестановку
Посмотрите здесь:

Перестановка в строке первого и последнего слова.. - C++
Всем доброго времени суток!! Появилось вот такое задание написать программу на языке C++ чересстрочного слияния двух текстовых файлов...

Вывод минимального слова. Первого если их несколько в строке - C++
Доброго времени суток. Так как я только недавно начал изучение C++, у меня соответственно случились небольшие затруднения, а конкретно: ...

Задача на поиск совпадений букв первого слова во втором - C++
Ребят, решите пожалуйста задачу: Даны два слова. Для каждой буквы первого слова (в том числе для повторяющихся в этом слове букв)...

Указать общие символы первого и последнего слова в заданной строке (с использованием множества) - C++
Помогите решить задачу с использованием множества: указать общие символы первого и последнего слова в заданной строке.

Как сделать перестановку в строке - C++
Всем привет. Нужна помощь по следующему вопросу. Входные данные: вводим строку без пробелов и ключ (последовательность чисел). Далее...

Задача на перестановку операция сложегия, вычитания. инкремента и т.д. - C++
Есть код: #include&lt;iostream&gt; using namespace std; int main() { int a,b=20; for(a=0,a&lt;b;a--)

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
10.11.2012, 10:41     Подсчёт первого слова в строке и задача на перестановку #2
А что сделать-то нужно?
asidorchenko
379 / 205 / 25
Регистрация: 09.04.2012
Сообщений: 635
10.11.2012, 11:01     Подсчёт первого слова в строке и задача на перестановку #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
#include <iostream>
#include <string>
 
using namespace std; 
int main(){ 
setlocale(0,"");
        int i=0;
 
        char s[1024] = {' '},*w,*a,*k;
        cin.get(s, 1024);
        a=strtok(s, " "); // получение первого токена
        if (a)
        {
         k = a; 
         i++;
 
// проблема в том, что произошел один вызов функции strtok
// поэтому повторный вызов с w не работает
//      for(w = strtok(s, " \n\t"); w != NULL; w = strtok(NULL, " \n\t")) if (w == a) i++;
 
         for(a = strtok(NULL, " \n\t"); a; a = strtok(NULL, " \n\t")) 
         {          
          if (strcmp(a,k) == 0) 
           i++;
         }
        } 
 
        cout <<"Слово "<<k<<" повторяется "<<i<<" раз";
        cin.get();
        cin.get();
        return 0;
}
char * strtok ( char * str, const char * delimiters );
Функция разбивает str на токены, которые представляют из себя последовательность символов, разделенных любым из символов-разделителей (delimiters).

При первом вызове функция ожидает строку C в качестве аргумента для str, первый символ который используется в качестве начальной позиции для поиска токенов. При последующих вызовах функция ожидает нулевой указатель и использует позицию сразу после завершения последнего токена в качестве новой начальной позиции для поиска.

Для определения начала и конца токена, функция сначала определяет начальную позицию, становящуюся началом токена) первого символа, который не является разделителем, содержащимся в delimiters. Затем поиск начинается с начала токена до первого вхождения символа, входящего в состав delimiters, который становится окончанием токена.

Окончание токена автоматически замещается функцией нулевым символом, и функция возвращает начало токена.

Как только завершающий нулевой символ был найден при вызове strtok, все последующие вызовы функции с нулевым указателем в качестве первого аргумента возвращает нулевой указатель

Позиция, где был найден последний токен сохраняется внутри функции для использовании при следующем вызове.

параметры:
str - строка. Если указывается нулевой указатель, то функция продолжает поиск с того места, где закончился предыдущий успешный вызов
delimiters - разделители

Добавлено через 10 минут
Во второй задаче проблема в том, что программа ожидает ввода 10 символов, и когда она их получает часть из них записывается в str.

tuchkafivet -11 символов, t записывается в str
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 178
10.11.2012, 16:28  [ТС]     Подсчёт первого слова в строке и задача на перестановку #4
asidorchenko, спс первая программа стала работать, я понял где я допустил ошибку
ну вот вторая даже после сказанных вами изменений не в какую не хочет, буквы не те выдает которые нужно сменить
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
#include <iostream>
#include <stdio.h>
#include <string.h>
 
using namespace std;
 
int main(){
    setlocale(0, "");
    int n;
    char a[10],*str;
    cout << "Введите последовательность А\n";
    for(int j= 0; j <10; j++)
        cin >>a[j];
    cout <<"Введите n\n";
    cin >>n;
        str =new char [n];
    cout<<"Введите "<<n<<" элементов "<<"S\n";
    for(int i = 0; i < n; i++)
        cin >>str[i];
    for(int i = 0; i < n; i++)
    for(int j = 0; j < 10; j++)
    {
        if((str[i] == a[j+1] && a[j] == str[i-1])){
            cout << "Нужно поменять местами буквы "<<str[i]<<" и "<<str[i+1]<<endl;
            cin.get();
            cin.get();
        }}
    return 0;
asidorchenko
379 / 205 / 25
Регистрация: 09.04.2012
Сообщений: 635
11.11.2012, 08:01     Подсчёт первого слова в строке и задача на перестановку #5
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
#include <iostream>
#include <stdio.h>
#include <string.h>
 
using namespace std;
 
int main(){
    setlocale(0, "");
    char a[10],str[1024] = {' '};
    cout << "Введите последовательность А\n";
    for(int j= 0; j <10; j++)
        cin >>a[j];
    cin.ignore(numeric_limits<std::streamsize>::max(), '\n');
    cout<<"Введите Sn\n";
    cin.get(str, 1024); 
    cin.ignore(numeric_limits<std::streamsize>::max(), '\n');
    for(int i = 0; i < 1024; i++)
    for(int j = 0; j < 10; j++)
    {
        if((str[i] == a[j+1] && a[j] == str[i+1])){
            cout << "Нужно поменять местами буквы "<<str[i]<<" и "<<str[i+1]<<"\n";
    }}
    cin.get();
    return 0;
}
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 178
11.11.2012, 15:57  [ТС]     Подсчёт первого слова в строке и задача на перестановку #6
asidorchenko, все работает но вопрос что делает эта строка
C++
1
cin.ignore(numeric_limits<std::streamsize>::max(), '\n');
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2012, 13:32     Подсчёт первого слова в строке и задача на перестановку
Еще ссылки по теме:

Подсчёт слов в строке - C++
Помогите пожалуйста, необходимо найти количество повторяющихся слов в строке. Пример вывода в программе: Исходная строка: stroka...

Подсчёт количества слов в строке - C++
Помогите разобраться в проблемке. Программа должна считывать текст из файла по слову и копировать его в другой. При этом счётчик их...

Подсчёт количества чисел в строке - C++
Подсчитать количество чисел в первой строке из текстового файла: код написала, всё хорошо считывается из текстового файла и выводится на...

Подсчёт повторов каждого слова в set - C++
Прошу помочь с конкретным моментом реализации этой задачи. Как пройтись по всем словам, посмотреть, есть ли повторы данного слова и если...


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

Или воспользуйтесь поиском по форуму:
asidorchenko
379 / 205 / 25
Регистрация: 09.04.2012
Сообщений: 635
16.11.2012, 13:32     Подсчёт первого слова в строке и задача на перестановку #7
Игнорирует символы, которые появляются после превышения количества введенных символов над количеством символов массива, до перехода на новую строку с учетом ограничения на размер потока
Yandex
Объявления
16.11.2012, 13:32     Подсчёт первого слова в строке и задача на перестановку
Ответ Создать тему
Опции темы

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