Counting Multi-Character Characters in String

佐手、 提交于 2019-12-12 01:25:39

问题


For example, how do you count the occurrence of "TJ" in OAEKOTJEOTJ?

if (s[i] == 'TJ') and (s[i] == 'T'+'J')
    x += 1;

First one gives me an error, second one doesn't count. I need a beginner solution to this, I haven't learned very much about c++ commands yet. Thanks

int x = 0
string s;
cin >> s;
for (int i = 0; i < 100; i++)
if (s[i] == T || s[i] == t) && (s[i+1] == J || s[i+1] == j)
x += 1
cout << x << endl;

That's the excerpt from my code, it doesn't count any tj, tJ, Tj or TJ


回答1:


Try using:

if(s[i] == 'T' && s[i+1] == 'J') // and make sure you do not run out of bounds of string with index i.
x += 1;

EDIT: Based on your code:

int x = 0
string s;
cin >> s;
for (int i = 0; i < 100; i++)
if (s[i] == T || s[i] == t) && (s[i+1] == J || s[i+1] == j)
x += 1
cout << x << endl;

You should do it like following:

int x = 0
string s;
cin >> s;
for (int i = 0; i < s.length()-1; i++) // use size of string s.length()-1 to iterate the string instead of 100
     if (s[i] == 'T' || s[i] == 't') && (s[i+1] == 'J' || s[i+1] == 'j') // compare the ascii values of characters like - 'T' 'J' etc.
         x += 1
cout << x << endl;



回答2:


std::string provides a function find which searches the string for substrings, including multi-character substrings (below, I am using C++11 syntax):

#include <iostream>
#include <string>

int main()
{
  using namespace std;
  string text { "OAEKOTJEOTJ" };
  unsigned int occ { 0 };
  size_t       pos { 0 };
  for (;;) {
    pos = text.find("TJ",pos);      // Search for the substring, start at pos
    if (pos == string::npos)        // Quit if nothing found
      break;
    ++pos;                          // Continue from next position
    ++occ;                          // Count the occurrence
  }
  std::cout << "Found " << occ << " occurrences." << std::endl;
}

The way it's done above we advance by one character only after each match. Depending on whether/how we want to deal with overlapping matches, we might want to advance pos by the length of the search pattern. (See chris's comment as well.)




回答3:


Try this:

#include <locale> // for tolower() function

string tolower(string s) {
  tolower(s[0]);
  tolower(s[1]);
  return s;
}
...
int main() {
  string s;
  cin >> s;
  int n = s.size(),cont = 0;
  for(int i = 0; i < n ; ++i) {
    if(tolower(s.substr(i,2)) == "tj") {
      ++cont;
    }
  }
  cout << cont << endl;
  return 0;
}


来源:https://stackoverflow.com/questions/13617534/counting-multi-character-characters-in-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!