2016-09-22 2 views
-2

это мой первый вопрос на этом сайте, поэтому, извините, если я что-то не так.Сравнение индекса в массиве const char с char

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

//i read in all the letters into the character array from my file and 
//display them to the screen to show that it works (and it does) 

//here is the for loop to go through the array 
// i am trying to check if the contents of the current index are C,S, or R. 
//by comparing them to characters. 

ifstream inputFile; 
     string path; 
     int cloud,rain,sun = 0; 
     char C = 'C'; 
     char R = 'R'; 
     char S = 'S'; 
     char array [3][30]; 
     cout << "The purpose of this program is to read in a text file and calculate a the number of days that were rainy." << endl; 
     do{ 
      cout << "Please enter the full path to the included \" Summer.txt\" file included witht this program." << endl; 
      cin >> path; 
      inputFile.open(path); 
      if(!inputFile){ 
       cout << "ERROR!!! No file was found at this location or there was a problem reading the file!" << endl; 

      } 
     }while(!inputFile); 
     if(inputFile){ 
      cout << "Success! The file was found and read!" << endl; 

      for(int r =0; r<3; r++){ //this is the loop to read in the text file 
      for (int c = 0; c < 30; c++){ 
       inputFile >> array[r][c]; 
      } 
     } 
     for(int r =0; r<3; r++){ //this outputs the array to the screen 
      for (int c = 0; c < 30; c++){ 
       cout << array[r][c] << " "; 
      } 
      cout << endl;  
     } 
     for(int r =0; r<3; r++){ //this is the loop to add up all the sun, cloud, and rain values. 
      for (int c = 0; c < 30; c++){ 
       if(array[r][c] == C){ 
        cloud++; 
       } 
       else if(array[r][c] == S){ 
        sun++; 
       } 
       else if(array[r][c] == R){ 
        rain++; 
       } 
      } 
     } 
      cout << "Sun = " << sun << " rain = " << rain << " cloud = " << cloud << "." << endl; 


     } 

    } 

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

Есть ли способ сравнить содержимое индекса массива символов с буквой, чтобы получить логическое значение?

+1

Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –

+1

rxu имеет переменную C = 'C', так что это действительно так. Хотя облако и дождь не инициализируются, что может объяснить случайное неопределенное поведение, отладчик может помочь. –

+0

Сложно написать инструкцию if для каждой буквы. лучше использовать цикл для этого. Как и для набора массива 'char * letter = 'abcdefg ... ABCDEFG'' Затем для каждой буквы в документе проведите цикл по массиву букв, чтобы проверить, соответствует ли каждая буква в массиве букв буквой из документа. – rxu

ответ

1

array[r][c] = S следует заменить array[r][c] == S и array[r][c] = R следует заменить array[r][c] == R.

также инициализировать облака, солнце и дождь с 0.

0

Вы не должны нуждаться в 2 одномерный массив, просто использовать один символ массив

char array [30] 

теперь используют 1 петлю вместо 2 и корпус/переключатель заявление вместо IFS:

for (int i = 0; i < 30; i++) 
{ 
     switch (array[i]) 
     { 
     case 'C': 
     cloud++; 
     break; 
     case 'R': 
     rain++; 
     break; 
     case 'S': 
     sun++; 
     break; 
     } 
} 
0

Хорошо, кажется, что мои булевы сравнения были в порядке, хотя когда я объявил
int cloud, rain, sun = 0; , по-видимому, я только объявлял солнце равным 0. меняя это, чтобы назначить одну переменную за декларацию, зафиксировал мою программу!

Смежные вопросы