2010-09-22 21 views
5
/* strchr example */ 
#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char str[] = "This is a sample string"; 
    char * pch; 
    printf ("Looking for the 's' character in \"%s\"...\n",str); 
    pch=strchr(str,'s'); 
    while (pch!=NULL) 
    { 
    printf ("found at %d\n",pch-str+1); 
    pch=strchr(pch+1,'s'); 
    } 
    return 0; 
} 

Làm cách nào tôi lập chỉ mục đường để tôi thay thế mọi 'bằng' bằng 'r'.Làm cách nào để thay thế ký tự trong ví dụ này bằng strchr?

Cảm ơn.

+0

Chỉ cần tò mò - là bài tập về nhà này, hoặc bạn đang cố gắng tự học C? –

+0

trên của riêng tôi ....... –

Trả lời

9

Bạn không cần lập chỉ mục chuỗi. Bạn có một con trỏ đến các nhân vật bạn muốn thay đổi, vì vậy giao thông qua con trỏ:

*pch = 'r'; 

Nói chung, tuy nhiên, bạn chỉ sử dụng []:

ptrdiff_t idx = pch - str; 
assert(str[idx] == 's'); 
+0

có đó là những gì tôi đang tìm cảm ơn bạn. Nó không tham chiếu đến ký tự mà nó trỏ tới trong chuỗi và thay thế ký tự bằng ký tự mới. –

1
void reeplachar(char *buff, char old, char neo){ 
    char *ptr;   
    for(;;){ 
     ptr = strchr(buff, old); 
     if(ptr==NULL) break; 
     buff[(int)(ptr-buff)]=neo; 
    }   
    return; 
} 

Cách sử dụng:

reeplachar(str,'s','r'); 
+0

Ok Tôi đã tò mò làm thế nào để có được chỉ số từ con trỏ, vì vậy bạn gõ cast nó vào int với: (int) (ptr-buff)? –

+1

@Tôi có, đó là những chỉ mục, nếu bạn muốn tất cả, cần một mảng int mới để lưu trữ trong –

0

Miễn là chương trình của bạn thực sự tìm kiếm vị trí mà không có lỗi (tôi đã không kiểm tra), câu hỏi của bạn sẽ là làm thế nào để tôi thay đổi nội dung của một đối tượng mà con trỏ của tôi pch đã trỏ?

3

Bạn có thể sử dụng chức năng sau:

char *chngChar (char *str, char oldChar, char newChar) { 
    char *strPtr = str; 
    while ((strPtr = strchr (strPtr, oldChar)) != NULL) 
     *strPtr++ = newChar; 
    return str; 
} 

Nó chỉ đơn giản chạy qua chuỗi tìm kiếm những nhân vật cụ thể và thay thế nó bằng các nhân vật mới. Mỗi lần thông qua (giống như của bạn), nó bắt đầu với địa chỉ vượt quá ký tự trước để không kiểm tra lại các ký tự đã được kiểm tra.

Nó cũng trả về địa chỉ của chuỗi, một thủ thuật thường được sử dụng để bạn có thể sử dụng giá trị trả về là tốt, chẳng hạn như với:

printf ("%s\n", chngChar (myName, 'p', 'P')); 
Các vấn đề liên quan