keyur_raval Ответов: 1

Как идентифицировать каждую разделенную часть в C++? (Если пользователь вводит строку "***3aaa*1h**2kk", то мне нужно идентифицировать эти части на основе звезд и сохранить их в виде строки.)


Здесь пользователь вводит строку типа"***3aaa*1h**2kk". Мой код просто разбил эту строку на три разные части, и мне нужно реализовать этот код в качестве идентификатора каждой части означает, что если есть 3 звезды, то она называется как 3 и сохраняет эти части как строку; если есть 2 звезды, то она называется как 2 и сохраняет эти части как строку; если есть только 1 звезда, то она называется как 1.

Часть / Значение
3 / 3ааа
1 | 1ч
2 / 2кк

#include <iostream>
#include <string>
#include<vector>

using namespace std; 

void split(string inputString);

int main() {
	string inputString = "";
	bool flag = true;

	while (flag)	
	{
		cout << "Please Enter the String: \n";
		getline(cin, inputString);

		if (inputString == "no")
		{
			flag = false;
		}
		else
		{
			split(inputString);
		}
	}
	return 0;
}

void split(string inputString) {
	string splitString = inputString;
	vector<string> wordVector;
	std::size_t prev = 0, pos;
	while ((pos = splitString.find_first_of("*", prev)) != std::string::npos)
	{
		if (pos > prev) {
			wordVector.push_back(splitString.substr(prev, pos - prev));
		}
		prev = pos + 1;
	}

	if (prev < splitString.length()) {
		wordVector.push_back(splitString.substr(prev, std::string::npos));
	}
	for (int i = 0; i < wordVector.size(); i++) {
		cout << wordVector[i]<<endl;
	}
}


Что я уже пробовал:

Здесь я отделил исходную строку, но я не знаю, как я могу идентифицировать эти части на основе звезд? пожалуйста, помогите мне решить эту проблему. Это будет высоко оценено.

Richard MacCutchan

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

1 Ответов

Рейтинг:
0

KarstenK

вы должны написать свой собственный разделенный код, с внешним циклом для каждой пары и внутренним циклом для каждого значения. Как-то вроде этого:

for(int i = 0; i < inputString.length; i++ ) {
  char c = inputString[i];

  if( c == '*' ) {
    int cnt = 1;//first found

    while( inputString[++i]== '*' ) {
      cnt++;
    }

    string result;

    while( inputString[i++] != '*' ) {
      result += inputString[i];
    }
    //reset the last increment
    i--;
    //store the cnt and result !!!
  } 
}


keyur_raval

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