2016-06-08 32 views
-1

我的任務是寫一個字符串,然後寫該字符串,需要與另外一個字符串替換的一部分。我設法讓它工作,但如果被替換的字符串是需要替換的字符串的一部分,它只是「吃」一些字母。我可以得到這個任務的一點幫助嗎?的工作代碼 示例:在一個又一個的中間添加新的字符串 - ç

輸入:

This is a beautiful day. 
END 

輸入2:

a be 

輸入3:

not a bee 

預期輸出:

This is not a beeautiful day. 

我的輸出:

This is not a beeful day. 

代碼:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <ctype.h> 
#define MAX 1000 

main(){ 
    char unos[MAX+1]; 
    int i = 0; 
    char c; 
    printf("Enter text. For end type END\n"); 
    while (1){ 
     scanf("%[^\n]%*c", unos, &c); 
     i = strstr(unos, "END") - unos; 
     if (i >= 0){ 
      unos[i] = '\0'; 
      break; 
     } 
    } 
    char trazena_zamjena[MAX + 1] = "\0"; 
    char zamjena[MAX + 1]; 
    printf("Enter part that needs to be replaced : "); 
    i = 0; 
    do{ 
     scanf("%c", &trazena_zamjena[i]); 
     if (trazena_zamjena[i] == '\n') { 
      trazena_zamjena[i] = '\0'; 
      break; 
     } 
     i++; 
    } while (trazena_zamjena[i] != '\n'); 
    printf("Enter replacing text : "); 
    i = 0; 
    do{ 
     scanf("%c", &zamjena[i]); 
     if (zamjena[i] == '\n') { 
      zamjena[i] = '\0'; 
      break; 
     } 
     i++; 
    } while (zamjena[i] != '\n'); 
    int l = i; 
    char *ptr; 
    ptr = strstr(unos, trazena_zamjena); 
    printf("pointer : %d %p", ptr, ptr); 
    strncpy(ptr, zamjena, l); 
    printf("%s\n", unos); 
} 
+2

如果你想讀一整行,不要使用'使用令人費解的格式字符串scanf',使用['fgets'(http://en.cppreference.com/w/c/io/fgets)代替。 –

+1

'的scanf(「%[^ \ n]的%* C」,UNOS,&c);'看來我錯了 – LPs

+0

的代碼@Joachim Pileborg輸入工作正常,一個與做出改變工作不正常。我們沒有獲得在課堂上與fgets呢,所以我們不能使用它。 –

回答

0

讓我們忘掉存儲方式。 當你在C中使用一個字符串時,你在內存中放置了一個由'\0'終止的字符序列。

假設你有下列字符串char * str = "string";具有地址str。 通過使用

ptr = strstr(str, "i"); 

ptr值將str+3 所以,想象一下,你試圖通過"ae"更換'i'(字符'i'的地址)。

strncpy(ptr, "ae", 2); 

將寫入'a'在地址由ptr(在'i')和'e'在指向的地址ptr + 1指出,(在這裏,它的'n'地址) 如果更換子是小,你應該改變所有followig字符。

您可以通過

printf("pointer : %d %p", ptr, ptr); 
int len_substr = strlen(trazena_zamjena); 
if (l > len_substr) 
    strncpy(ptr + l, ptr + len_substr, strlen(ptr + len_substr)); 
strncpy(ptr, zamjena, l); 

修改代碼結束時,如果你添加字符串小於子串刪除您有類似的問題。

+0

這是一條評論,而不是一個答案。 –

相關問題