Solution


/***********************************************
* Name:       secondword.cxx
* Author:     Leo Liberti
* Source:     GNU C++
* Purpose:    minimal C++ program
* Build:      c++ -o secondword secondword.cxx
* History:    060818 work started
***********************************************/

#include<iostream> 

bool isSeparator(char c, char* separators) {
  char endOfString = '\0';
  char* sepPtr = separators;
  bool ret = false;
  while(*sepPtr != endOfString) {
    if (c == *sepPtr) {
      ret = true;
      break;
    }
    sepPtr++;
  }
  return ret;
}

int charArrayLength(char* a) {
  int ret = 0;
  char endOfString = '\0';
  while(*a != endOfString) {
    ret++;
    a++;
  }
  return ret;
}

int main(int argc, char** argv) {
  using namespace std;
  int ret = 0;

  char endOfString = '\0';
  char theSentence[] = "Actually, couldn't you come with me?";
  char separators[] = " \t,.;:?!";
  char* strPtr = theSentence;
  char* strEnd;

  // find the beginning of the second word
  bool isSecondWord = false;
  while(*strPtr != endOfString) {
    while(isSeparator(*strPtr, separators)) {
      // while deals with case with consecutive separators
      strPtr++;
      isSecondWord = true;
    }
    if (isSecondWord) {
      // end of consecutive separators, means second word starts at strPtr
      break;
    } else {
      // character was not a separator, continue
      strPtr++;
    }
  }

  // find the end of the second word
  strEnd = strPtr;
  while(*strEnd != endOfString) {
    if (isSeparator(*strEnd, separators)) {
      // first separator found after second word, mark the end
      *strEnd = endOfString;
      break;
    }
    strEnd++;
  }

  // print the second word and its length
  cout << strPtr << "(" << charArrayLength(strPtr) << ")" << endl;

  return ret;
} 



Leo Liberti 2008-01-12