簡體   English   中英

使用指針替換C字符串中的字符

[英]Using pointers to subsitute characters in C strings

這不是家庭作業,而是期中學習。

我不能使用任何類型的數組索引,例如str [i]或*(str + i)

我必須使用c字符串“ EECS280ISAWESOME”,並將“ E”替換為c字符串“ XY”。 我還必須考慮到“ XY”變量的多個長度。

主要給出以下內容:

int main () {
    const char* S = "EECS280ISAWESOME";
    const char* P = "XY";
    char result[256];
    subsituteChar(S,P,'E', result);
    cout << result << endl;
} 

我的解決方案似乎很復雜/不好實踐/很丑陋。 我可以使用延遲並添加*(R+1)來做得更好,但我認為這是不允許的。

void subsituteChar(const char* S, const char* P, char c, char* R) {
    while(*S != '\0') {
        if(*S == c) {
            const char* PP = P;
            while (*P != '\0') {
                *R = *P;
                R++;
                P++;
            }
            P = PP;
        } else {
            *R = *S;
            R++;
        }
        S++;
    }
}

這有效,但我剩下XYXYCS280ISAWXYSOMXY2 我不知道怪異2來源。

由於這是一個學習問題,因此這里有個入門提示。 嘗試初始化結果數組。 我這樣做:

char result[256];
for (int i = 0; i < 250; ++i)
    result[i] = 'a';
result[250] = 0;

現在再次運行代碼,您將看到在輸出末尾有很多'a'字符,直至達到字符250為止。也就是說,您將看到:

“ XYXYCS280ISAWXYSOMXYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

如果您想自己弄清其余部分,請立即停止閱讀。


問題是您沒有顯式地終止字符串。

請注意,替換最后一個字符S並不是問題,而是while循環的終止條件。 由於您沒有手動從S復制'\\ 0'字符,因此您只希望結果數組充滿'\\ 0'字符,C和C ++不能保證。

只需將以下行添加到replaceChar函數的末尾即可解決該問題:

*R = '\\0';

這樣合適嗎

#include<stdio.h>
int main () {
    const char* S = "EECS280ISAWESOME";
    const char* P = "XY";
    char result[256];
    while(*S)
    {
        if(*S=='E') 
            printf("XY");
        else 
            printf("%c", *S);
        S++;
    }
} 

您的代碼是完全正確的,並且有很小的錯誤。 存在字符串事實,everry字符串應以空字符終止。 因此只需添加* R ='\\ 0'; 在while函數的末尾,該算法可以完美地工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM