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

Указатели и действия над указателями - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Использование функции fgets http://www.cyberforum.ru/cpp-beginners/thread1182577.html
Передо мной встала следующая проблема - не могу понять, как работает функция strcmp. К примеру приведу данный код программы: while(fgets(s,n,fin)!=NULL) { a++; } То есть суть данного цикла заключается в том, что с потока fin считывается строка s? Правильно ли я думаю? И что тогда в данном случае значит n?
C++ Вывести индексы элементов массива в том порядке, в котором соответствующие им эл-ты будут упорядочены пусть имеется массив действительных чисел. вывести индексы массива в том порядке, в котором соответствующие им элементы образуют возрастающую последовательность http://www.cyberforum.ru/cpp-beginners/thread1182573.html
C++ Вывести номер первой строки матрицы, содержащей равное количество полож. и отриц. элементов, без учета 0
вывести номер первой строки матрицы,содержащей равное количество положительных и отрицательных элементов,причем нулевые элементы не учитываются
Вывести массив "змейкой" C++
Помогите расположить массив вот так: 10 ... 1 11 ... 20 30 ... 21 31 ... 40 ... ... ... 111...120 Не знаю, как называется этот способ, заранее спасибо за помощь
C++ Небольшая задачка по строкам http://www.cyberforum.ru/cpp-beginners/thread1182566.html
Задача звучит следующим образом: В строке найти все слова, которые повторяются только один раз и записать их в отдельную строку. Моя реализация: #include <iostream> #include <cctype> #include <cstring> #include <string> #include "conio.h" #include "stdio.h" #include <cstdio>
C++ Объяснить фрагмент программы Здравствуйте. Нашел одну программу, пытаюсь в ней разобраться. Не могу понять следующий фрагмент: int comp(const void *a, const void *b) { return( strcmp( (char*) a, (char*) b) ); } Надеюсь, что кто-нибудь мне объяснит, что значит этот фрагмент. Полный код программы приведен ниже: подробнее

Показать сообщение отдельно
gekas
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 70
20.05.2014, 20:35  [ТС]     Указатели и действия над указателями
Цитата Сообщение от nmcf Посмотреть сообщение
s1 инициализирована?
Инициализирована:
C++
1
2
3
4
for (int i = 0; i < size; i++)
        s1[i] = '\0';               // Зполняем строку нуль-символом
    
    cin.getline(s1, size);
Кликните здесь для просмотра всего текста
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <cctype>
#include <cstring>
#include <string>
#include "conio.h"
#include "stdio.h"
#include <cstdio>
#define size 250
 
using namespace std;
 
void showStr(char* str){
    cout << "Строка:";
    for (int i = 0; i < size; i++) cout << str[i];
    cout << endl;
}
 
void checkStr(char * str){
    for (int i = 0; i < size; i++){
        if ((str[i] == ' ') && (str[i + 1] == ' ')) for (int j = i; j < size; j++) str[j] = str[j + 1];
    }
}
 
void main() {
    setlocale(LC_ALL, "Russian");
    char s1[size], result[size], *ptr, *resPtr;
 
 
 
    for (int i = 0; i < size; i++){
        s1[i] = '\0';               // Заполняем строку нуль-символом
        result[i] = '\0';
    }
    result[0] = ' ';
    cin.getline(s1, size);
    checkStr(s1);                   //Убираем пробелы, которые идут подряд
    while (s1[lengthStr] != '\0') lengthStr++;  //Ищем индекс последнего символа строки
 
    if (lengthStr == -1){
        cout << "Строка пустая!" << endl;
        system("Pause");
        exit;
    }
    
 
    ptr = strtok(s1, " ");
    
while (ptr!=NULL){
        
    if (strstr(result, strcpy(" ", strcpy(ptr, " "))) == NULL) strcat_s(result, strcpy(ptr, " "));  // ***
    
        ptr = strtok(NULL, " ");
    }
 
showStr(result);
    system("Pause");
}


Добавлено через 5 минут
Цитата Сообщение от Jupiter Посмотреть сообщение
перед тем как "поганить" строку strtok-ом нужно её скопировать, и осуществлять поиск в копии
Поиск не в s1, а в строке result, которую мы не "поганим" strtok'om

Кликните здесь для просмотра всего текста
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <cctype>
#include <cstring>
#include <string>
#include "conio.h"
#include "stdio.h"
#include <cstdio>
#define size 250
 
using namespace std;
 
void showStr(char* str){
    cout << "Строка:";
    for (int i = 0; i < size; i++) cout << str[i];
    cout << endl;
}
 
void checkStr(char * str){
    for (int i = 0; i < size; i++){
        if ((str[i] == ' ') && (str[i + 1] == ' ')) for (int j = i; j < size; j++) str[j] = str[j + 1];
    }
}
 
void main() {
    setlocale(LC_ALL, "Russian");
    char s1[size], result[size], *ptr, *resPtr;
 
 
 
    for (int i = 0; i < size; i++){
        s1[i] = '\0';               // Заполняем строку нуль-символом
        result[i] = '\0';
    }
    result[0] = ' ';
    cin.getline(s1, size);
    checkStr(s1);                   //Убираем пробелы, которые идут подряд
    while (s1[lengthStr] != '\0') lengthStr++;  //Ищем индекс последнего символа строки
 
    if (lengthStr == -1){
        cout << "Строка пустая!" << endl;
        system("Pause");
        exit;
    }
    
 
    ptr = strtok(s1, " ");
    
while (ptr!=NULL){
        
    if (strstr(result, strcpy(" ", strcpy(ptr, " "))) == NULL) strcat_s(result, strcpy(ptr, " "));  // ***
    
        ptr = strtok(NULL, " ");
    }
 
showStr(result);
    system("Pause");
}


Добавлено через 6 минут
Цитата Сообщение от Jupiter Посмотреть сообщение
Сообщение от gekas
как тогда "обернуть" str в пробелы?
Strtok противоположность
Можете продемонстрировать использование sprintf на конкретном примере (обернуть ptr в пробелы)? Буду очень признателен.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru