C ++ массивы и стрстрок - PullRequest
       44

C ++ массивы и стрстрок

0 голосов
/ 22 ноября 2018

Я работаю с массивами в C ++.Таким образом, мой ввод в массив O3B4F2, и я хочу иметь в выводе OOOBBBBFF? .. Я читаю о функции strtrok, но я не понимаю, что это действительно хорошо, потому что это разделение предложения на токены.

#include <iostream>
#include <string.h>
#include<stdlib.h>
using namespace std;
int main ()
{
  char a[100+1];
  cin>>a;
  char * pch;
  char dioba[]="0 1 2 3 4 5  6 7 8 9 ";
  pch = strtok (a,dioba);
  int c;
  for(int i=0;i<strlen(a);i++)
  {
      if(isdigit(a[i])==1)
      {

      }
  }
  while (pch != NULL)
  {
    cout<<pch<<endl;
    pch = strtok (NULL,dioba);
  }

  return 0;
}

Кроме того, я пытаюсь решить аналогичную задачу, где мне нужно разделить массив на наборы букв.Мне нужен вывод togo , и я хочу, чтобы мой вывод выглядел как ne ed, чтобы перейти .Поэтому после буквы e o o я хочу использовать пробел или новую строку.

 #include <iostream>
    #include <iostream>
    #include <string.h>
    #include<stdlib.h>
    using namespace std;
    int main ()
    {
      char a[100+1];
      cin>>a;
      char b[100+1];
      int  i=0,j=0;
      for(i;i<strlen(a);i++)
       {
        if(a[i]=='a'||a[i]=='e'|| a[i]=='i')
            for(j;j<strlen(a);j++)
            {
                b[j]=' ';
            }
          b[j]= a[i];
         cout<<b<<endl;
       }
      return 0;
     }

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Как вы описали проблему, ввод всегда будет иметь вид char, за которым следует int.Следовательно, вы должны выбрать пару (char, int) и распечатать ее в соответствии с правилом.

for(size_t i = 0; i < arr.size() - 1;) {
    int val = (int)arr[i+1] - 48;
    for(auto j = 0; i < val; j++) {
        cout << arr[i];
    }
    i += 2;
}
  1. Первый for() предназначен для обхода целого arr.
  2. Второй for() предназначен для печати конкретного char для его числа вхождений.

Примечание. Поскольку данный arr имеет тип char, вам необходимо преобразовать второй элемент пары из char в int.

0 голосов
/ 22 ноября 2018

Для вашего первого случая, как упоминалось в комментариях, нет необходимости использовать strtok.Вот пример кода (хотя есть много способов выполнить запрошенное задание):

#include <iostream>
#include <string>
#include <sstream>

int main ()
{
  std::string s;
  std::cin >> s;
  std::istringstream stream(s);

  char pch;

  // fetch stream for the character to repeat until the end of the string
  while( stream >> pch )
  {
      char nbChars;
      // fetch length for repetition
      stream >> nbChars;
      // convert character to its integer value
      nbChars -= '0';
      // repeat character as many times as needed
      for(int i=0; i < nbChars;i++)
      {
          std::cout << pch;
      }
  }

  return 0;
}

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

#include <iostream>
#include <string>

int main ()
{
  std::string s;
  std::string needSpaceChars{"aeo"};

  // read content on standard input
  std::getline(std::cin, s);
  // for each char, check its value and add space after the letters defined in needSpaceChars variable
  for(char pch: s)
  {
      // display character first
      std::cout << pch;
      // add space if character is in the list of characters to handle
      if( needSpaceChars.find(pch) != std::string::npos )
      {
          std::cout << ' ';
      }
  }

  return 0;
}
...