C ++ строка номер вхождения - PullRequest
0 голосов
/ 10 января 2020

Это мой первый раз, когда я спрашиваю что-то о stackoverflow, поэтому извините, если мне не удалось выполнить какой-либо аспект построения topi c et c ...

Так что я новичок ie на C ++, я все еще в начале. Я использую руководство, которое кто-то мне порекомендовал, и я застрял в упражнении, посвященном символам и строкам.

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

Я оставлю свой код ниже для кого-то, кто может мне помочь, если возможно, не дайте мне очевидный ответ, такой как код, а затем я просто скопирую и вставлю его. Если вы можете дать мне несколько советов о том, как это сделать, я хочу попытаться решить это самостоятельно. Всем спокойной ночи.

#include <iostream>
#include <string.h>
#define MAX 50
using namespace std;

int times_occ(string s, string k) {
  int count = 0, i = 0;
  char word[sizeof(s)];
  // while (s[i] == k[i])
  //    {
  //        i++;
  //        if (s[i] == '\0')
  //        {
  //            break;
  //        }
  //    }
  for (i = 0; i <= sizeof(s); i++) {
    if (s[i] == ' ' || s[i] == '\0') {
      break;
    }
    word[i] = s[i];
  }
  word[i] = '\0';
  for (i = 0; i <= sizeof(k); i++) {
    if (word) {
      if (k[i] == word[a]) {
        a++;
        count++;
      }
    }
  }
  cout << word << endl;
  cout << count << endl;  // this was supposed to count the number of times
                          // certain word was said in a string.
  return count;
}
int main() {
  char phrase[MAX];
  char phrase1[MAX];
  cin.getline(phrase, MAX);
  cin.getline(phrase, MAX);
  times_occ(phrase, phrase1);
}

Ответы [ 2 ]

3 голосов
/ 10 января 2020

Хорошо, во-первых, то, как вы использовали sizeof, на самом деле недопустимо.

sizeof не скажет вам длину строки. Для этого вам нужно std::string::size().

В этом случае std::string является объектом некоторого класса, а sizeof сообщит вам размер объекта этого класса. Каждый объект этого типа будет иметь одинаковый размер независимо от длины строки.

Например, рассмотрим код, подобный следующему:

std::string foo("123456789");
std::string bar("12345");

std::cout << sizeof(foo) << "\t" << foo.size() << "\n";
std::cout << sizeof(bar) << "\t" << bar.size() << "\n";

Когда я запускаю это, я получаю вывод например:

8   9
8   5

Итак, в этой реализации sizeof(string) всегда равно 8, но some_string.size() говорит нам фактическую длину строки.

Итак, это должно быть как минимум достаточно, чтобы вы начали двигаться в полезном направлении.

0 голосов
/ 10 января 2020

Как уже упоминалось @JerryCoffin, ваш массив word имеет недопустимый размер. Но я хочу сделать более фундаментальный вывод:

Ваш код имеет два цикла и несколько переменных с произвольными именами. Откуда мне знать, в чем разница между s и k? Я даже путаю k и i в том смысле, что забываю, что k - это строка, а не целое число. Такой код трудно читать и отлаживать. И мы немного ленивы и не любим отладку чужого кода ...

Я предлагаю вам:

  • Понять, что делают ваши циклы или что различные части вашей функции выполняют.
  • Создайте небольшие автономные функции - не более одной l oop каждая, пожалуйста! - для каждой из этих частей.
  • Используйте значимые имена для параметров каждой функции и для локальных переменных.

И затем, если ваша программа не работает - попробуйте отладить одну функцию за один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...