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

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

Восстановить пароль Регистрация
 
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 174
09.11.2012, 23:25     Подсчёт первого слова в строке и задача на перестановку #1
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++ Подсчёт количества чисел в строке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 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
Сообщений: 174
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
Сообщений: 174
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++ Вывод минимального слова. Первого если их несколько в строке
C++ Подсчёт слов в строке. Подсчёт символов в словах строки
C++ Указать общие символы первого и последнего слова в заданной строке (с использованием множества)

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

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

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