[英]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.