忽略C

时间:2019-05-20 12:33:20

标签: c

我需要编写一个代码,该代码读取一个字符串,并将小于'm'的字符串中的字母放入一个称为first的数组中,将'm'或更大的字母放入一个名为持续。当遇到非小写字母时,只需跳过它并移至下一个字母即可。

我的代码仅在字符串中使用非小写字母时有效,而在涉及数字和符号时则无效。

#include<stdio.h>

// main function
int main(void){
  // declare strings
  char letters[20], first[20], last[20];

  // read in a lower-case string
  printf("enter letters: ");
  scanf("%19s",letters);  //the number %19s limits the string to being
                          //19 characters long (plus the null character)

  // setup indexes to track current index of  arrays. 
  int letters_index, first_index, last_index;
  letters_index=0;
  first_index=0;
  last_index=0;
char curr_letter ;

  // loop and split
while(letters[letters_index] != 0) { // not null
    switch (letters[letters_index]){
        case 97 ... 122:
    curr_letter = letters[letters_index];
    // less than 'm'?
    if(curr_letter < 'm'){
      // add to first
      first[first_index]=curr_letter;
      first_index++;
    } else {
      // otherwise, add to last
      last[last_index]=curr_letter;
      last_index++;
    }
    letters_index++;
            break;
    }
}


  // now add nulls
  first[first_index]='\0';
  last[last_index]='\0';

  // print arrays
  printf("first: %s\n",first);
  printf("last: %s\n",last);
}

如果输入为hell2o,则输出应为first:hell;最后:o

2 个答案:

答案 0 :(得分:2)

仅当输入匹配letters_index时,您的代码才会递增case 97 ... 122:。如果发现不匹配的字符,则会无休止地循环。

将递增的letters_index++;switch{}中移到while循环的末尾。

与错误无关:您应该使用相应的字符常量97122或库函数{{1},而不是数字'a''z' }。

修改后的代码:

islower()

答案 1 :(得分:1)

仅当字符介于Image.gz'a'之间时,您才增加计数器,结果您将陷入无限循环,请将计数器移到'z'之外:

switch

另一方面,请勿使用像97和122这样的幻数:

while(letters[letters_index] != 0) { // not null
    switch (letters[letters_index]){
        case 97 ... 122:
            curr_letter = letters[letters_index];
            // less than 'm'?
            if(curr_letter < 'm'){
              // add to first
              first[first_index]=curr_letter;
              first_index++;
            } else {
              // otherwise, add to last
              last[last_index]=curr_letter;
              last_index++;
            }
            // letters_index++; --> Not here
            break;
    }
    letters_index++; // --> Here
}