2017-09-09 8 views
0

私は現在、C & R Cで3-3の運動をしています。なぜ私の解決策が機能していないのか混乱しています。この演習の目的は、2つの文字列を渡すことです。 "a-z"や "0-9"のようなものに遭遇すると、2つの文字の完全なリストを出力します。これは私の現在の解決策です:K&R C演習3-3配列のchar要素を編集できない?

#include <stdio.h> 
#include <stdlib.h> 

char* expand(char s1[], char s2[]); 

int main(){ 
    char s1[100] = {"a-z is higher on the ascii table than 0-9\0"}; 
    char s2[200]; 
    expand(s1, s2); 
    printf("%s\n", s2); 
} 

char* expand(char s1[], char s2[]){ 
    char temp; 
    char temp2; 
    for(int i = 0; s1[i] != '\0'; i++){ 
     if(s1[i] == '-'){ 
      temp = s1[i-1]; 
      temp2 = s1[i+1]; 
      for(int j = temp + 1; j < temp2; j++){ 
       s2[i] = j; 
       i++; 
      } 
     } 
     else 
     { 
      s2[i] = s1[i]; 
     } 
    } 

    return s2; 
} 

ご協力いただきありがとうございます!

+1

'a-z'を26文字に拡張すると、' else s2 [i] = s1 [i]; 'はもう正しく動作しません。別々の入出力インデックスが必要です。 – user3386109

+0

何をお手伝いしますか? [ask]を読んで助言に従ってください。 – Olaf

答えて

1

int i2 = 0; 
for(int i = 0; s1[i] != '\0'; i++){ 
     if(s1[i] == '-' && i != 0 && s[i+1] != '\0'){ 
      temp = s1[i-1]; 
      temp2 = s1[i+1]; 
      for(int j = temp + 1; j < temp2; j++){ 
       s2[i2] = j; 
       i2++; 
      } 
     } 
     else s2[i2++] = s1[i]; 
    } 

user3386109 @により示唆されるように拡張がiは、実際の入力s1に反復するために文字化けされるだろう、行われる場合これは、コードのループ部分でなければなりません。したがって、それを分離してください。

関連する問題