сроковый масив

Тема в разделе "MS Visual C++", создана пользователем o4en1 krutoi, 6 дек 2007.

  1. o4en1 krutoi

    o4en1 krutoi Гость

    #include <iostream>
    #include <windows.h>
    using namespace std;
    void main()
    {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char str[] = "Здравствуй, мир!"; // объявляем символьный массив
    char *b; // объявляем указатель на символ
    b = &str[12]; // теперь b указывает на 12-ый символ str //символ это пробел
    *b = 'M'; // присваиваем первому элементу b символ 'М'
    cout << b; // выводим строку b на экран (Мир!) //присвоили указателю b
    символ 'M' а выходит слово мир почему не 'M' подскажите хто знает
    }
     
  2. Over

    Over Well-Known Member

    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    У тебя указателю присваивают адрес буквы "м". Вся строка остаётся в памяти. Только указатель запоминает позицию буквы "м". Это не значит, что обратившись к b, мы можем обратиться только к букве "м" и всё, мы можем обращаться к любому символу строки. Потом вместо м маленькой прописывается М большая. Просто обычное присвоение одного символа. Опять же, на целостность всей строки это никак не влияет, просто байтик подменился, а строка не развалилась, не раскидалась, не отвалился от строки конец после буквы м, и не отвалилось от строки начало до буквы м. Дальше, функция cout выполняет вывод на экран. Если ей скормить указатель на строку, то функция выводит последовательно все последующие символы строки, начиная с того, на который указывает b, пока не дойдёт до символа "\0" - ноль-терминатор или символ окончания строки. Вот поэтому у тебя и вывелось на экран всё, что было от буквы м и до конца строки, т.е. слово Мир.
     
  3. o4en1 krutoi

    o4en1 krutoi Гость

    #include <iostream>
    #include <windows.h>
    using namespace std;
    void main()
    {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char str[100]; // объявление строки символов

    // просим пользователя ввести строку символов
    cout << "введите строку: ";
    cin >> str; // считываем строку, введенную пользователем

    int count = 0; /* объявление переменной-счетчика, в которой
    будем хранить количество вхождений х в строку */

    // в цикле сравниваем каждый символ строки с х-ом,
    // в случае совпадения увеличиваем переменную-счетчик на 1.
    int i = 0;
    while(str != '\0')
    {
    if (str == 'x') //хочу сделать так штобы прога искала не x а считала символы на што х поменять штобы она считала символы
    count++;
    i++;
    }

    // выводим результат на экран
    cout << "\n данные " << count;
    }
     
  4. gamecreator

    gamecreator Гость

    ты хочешь подсчитать кол-во символов в массиве? strlen. а еще у тебя неоптимизированный код.
     
  5. o4en1 krutoi

    o4en1 krutoi Гость

    почему неоптимизированый код
    мне надо научится такое задние учителя функцию надо написать самому
     
  6. gamecreator

    gamecreator Гость

    ну так убери if (str == 'x') и в count получишь кол-во элементов
     
Загрузка...

Поделиться этой страницей