2016-12-02 65 views
1

我的問題是我有一個輸入說:交換C中某個單詞的字符串位置?

# ## abC### 

和我的輸出應該是:

### abC# ## 

我要做的就是通過輸入我環路,每當我發現英文單詞前一個字符,英文單詞和英文單詞之後的字符在以前初始化的陣列中使用我的算法的以下部分:

char before[before_size],after[after_size],word[word_size]; 
word_found = 0; 
if(flag == 1){ 
    for(j = 0;j<strlen(word_arr);j++){ 
     if(isalpha(*(word_arr+j)) == 0 && word_found == 0){ 
      before[b_counter] = *(word_arr+j); 
      b_counter++; 
      //"I am inserting elements in the before array!\n"); 
     }else if(isalpha(*(word_arr+j)) != 0){ 
       word[word_counter] = *(word_arr+j); 
       word_found = 1; 
       word_counter++; 
       //"I am inserting elements in the word array!\n"); 
     }else if(isalpha(*(word_arr+j))== 0 && word_found == 1){ 
       after[a_counter]= *(word_arr+j); 
       a_counter++; 
       //"I am inserting elements in the after array!\n"); 
     } 
    } 
    printf("%s %s %s",after,word,before); 
} 

word_arr基本上是用戶輸入。 但輸出歪斜,因爲這是我得到的輸出:

###> abc > # ## r"[email protected] # ## abC### 

什麼是那些垃圾計算機輸出在哪裏他們來自?

回答

2

計算機輸出的是什麼垃圾?

這是從字符串初始化部分字符的字符數組beforewordafterprintf%s不知道初始化部分結束的位置,所以它繼續直到找到'\0'字符。

它們從哪裏來?

原因是缺少空終止符。在循環之後添加它們如下:

before[b_counter] = '\0'; 
word[word_counter] = '\0'; 
after[a_counter] = '\0'; 
+0

是的,它可以解決奇怪的字符彈出!我的另一個擔心,現在的輸出是 ## abc# 在非常乞討的句子中有一個空格,因爲我將它包含在我的「After」數組中。任何想法如何刪除它,使我的輸出從一開始就有一個空間開始? –

+1

,因爲您想要在每個字符串(char-array)的末尾添加一個額外的字符,您必須爲每個字符串(char-arrays)分配一個額外的索引。所以每個char-array需要擴展1個額外的地方 –

+1

@MahmoudAyman你的代碼是一個簡單的狀態機;你需要給它增加一個狀態 - 在單詞之後但在後綴之前。創建一個'after_found'標誌,並且在該單詞後面看到不是'isspace(...)'的第一個字符時,將其設置爲1。我想你在''之前''後面的空白處有類似的問題。 – dasblinkenlight

相關問題