sum loop or "some"thing else?

Pardon the pun. I have two questions about this project for an assignment. Question #1 is around line 36 and #2 is around line 97. I tried to do this myself, can't seem to figure these two out: (For experience, I am nearing the end of my first semester of programming. C++ is my first language.)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*practice program for 5b*/
#include <iostream>
#include <cstring>
#include <cctype>

void sort(char a[], int number_used);
void swap_values (char& v1, char& v2);
int index_of_smallest(const char a[], int start_index, int number_used);
void deleteRepeats(char a[], int& size); 
bool findChar(char mark, char a[], int size); 

using namespace std;
int main()
{
 int i, len = 0, words = 0, letters = 0, mark = 0;
  
 char userInput[200];
 cout << "Enter a phrase with a '.' as a terminating character." << endl << endl;
 cin.getline(userInput, 200);/*gets the userInput as a phrase*/
 /*cout << userInput;*/
 cout << endl;
 
 len = strlen(userInput);/*counts the characters in the string*/
 cout << "There are " << len << " characters in your phrase." <<endl << endl;
 
 for (i = 0; i < len; i++)/*to find the number of words in userInput*/
     {
     userInput[i] = tolower(userInput[i]);/*removes the capial letters*/
        if ((userInput[i] == ' ') || (userInput[i] == '.') || (userInput[i] == '\n'))
           {
              words++;/*calculates number of words based on spaces.*/
           }
     }
  cout << "There are " << words << " words in your phrase." << endl << endl;
  
 for (i = 0; i < len; i++)/*remove spaces and punctuation*/
     {
        if (userInput[i] != ' ' || userInput[i] != '.')  /*QUESTION #1  I've tried a few combinations of this 
adding '!' and ',' and '-'.  
It only seems to use the ' '*/
         {
             cout << userInput[i];
         }
     }
         
sort(userInput, len);
cout << endl;
cout << endl;
cout << "Here are the letters used in your phrase: " << endl;
deleteRepeats(userInput, len);

for (i = 0; i < len; i++)
 {
 cout << userInput[i] << endl;
}
 
 system ("pause");
 return 0;
}/*end of main*/

/****Function Definitions****/

void sort(char a[], int number_used)
{
     int index_of_next_smallest;
     for (int index = 0; index < number_used - 1; index++)
     {
         index_of_next_smallest = index_of_smallest(a, index, number_used); /*sort function calls index_of_smalles*/
         swap_values(a[index], a[index_of_next_smallest]);  /*sort funcion calls swap_values function*/
     }
}     


void swap_values(char& v1, char& v2)
{
char temp;
temp = v1;
v1 = v2;
v2 = temp;

}

int index_of_smallest(const char a[], int start_index, int number_used)
{
     int min = a[start_index], index_of_min = start_index;
     for (int index = start_index + 1; index < number_used; index++)
     {
         if (a[index] < min)
         {
            min = a[index];
            index_of_min = index;
         }
     }

   return index_of_min;
}


bool findChar (char mark, char a[], int size)  /*QUESTION #2 I need to add the number of individual 
characters to the list of characters used.  
I'm thinking a sum loop would work.  Can't seem to place it in the right place.  Any suggestions?*/
{
   for (int i = 0; i < size; i++)
      {
         if (a[i] == mark) return true;
      }
      
      return false;
   }
    
void deleteRepeats(char a[], int& posUsed)
{
   int i;
   int newSize =0;  
   
   for (i = 0; i < posUsed; i++)
      {
      if(!findChar(a[i], a, newSize))/*IMPORTANT - function call within a function calls the bool*/
         {
            a[newSize] = a[i];
            newSize++;
         }
      }
   posUsed = newSize;
}      


Thank you for your suggestions for any other advice you might have!

K
Line 38. if (userInput[i] != ' ' || userInput[i] != '.')

Think about it. The only way that expression can be false is if both conditions are false (false or false == false; true or <any> == true). But for both conditions to be false, userInput[i] has to be both equal to a space and equal to a dot at the same time.

jsmith, I plugged in && instead of ||. It worked.

Thank you!

K
Topic archived. No new replies allowed.