[英]How to replace a character in a string in C?
我正在寫一個函數,用字符串中的“#”替換給定字符。 該函數應返回一個指針,該指針指向剛替換的字符之后的位置。 另外,該字符串不是以NULL結尾的,它以'#'結尾。 字符串無法復制,應自行修改。 現在,我有以下內容:
char *es_token(char *s, char c)
{
int i = 0;
while(s[i] != '#'){
if (s[i] == c){
putchar('#');
i++;
}
else{
return 0;
}
}
return (char*)(s);
}
我不知道在這種情況下如何返回指針。 我將衷心感謝您的幫助。
C字符串char *s
指向字符i
的指針是該條目的地址:
&s[i]
假設s[i]
只是*(s + i)
的簡寫,則上述內容與以下內容相同:
s + i
您的代碼的其他問題:
putchar
向終端寫入一個字符。 它不會替換字符串中的任何內容。 為此,使用s[i] = '#'
return
語句處理方式錯誤:找到所需的內容后返回所需的指針,否則在檢查了整個字符串后返回0。 return
沒有強制要求。 不要這樣做,因為強制類型轉換可以隱藏有關不兼容類型的警告和錯誤。 所以:
char *es_token(char *s, char c)
{
int i = 0;
while(s[i] != '#') {
if (s[i] == c) {
s[i] = '#';
return &s[i + 1];
}
i++;
}
return NULL;
}
假設未保護字符串s
的內存以防寫入(即,它不是字符串文字),則可以這樣操作:
if (s[i] == c){
s[i] = '#';
return &s[i+1]; // This produces a pointer to (i+1)'st character of s
} else {
i++;
}
這將返回一個替換字符之后的字符指針。
char *es_token(char *s, char c)
{
int i = 0;
while(s[i] != '#'){
if (s[i] == c){
s[i] = '#';
return s+i+1;
}
i++;
}
return NULL;
}
指針只是內存中的一個位置。 如果返回s+i+1
,編譯器將獲取地址s
(字符串的開頭),並將i+1
加到其中,計算出剛替換的位置的地址加1。
如果您發現c
的字符或字符文字#
則將您的代碼解釋為您要終止搜索。 然后:
char *es_token(char *s, char c) {
int i = 0;
while(s[i] != '#') { // as long as not #
if (s[i] == c) { // if the current char is c
s[i] = '#'; // change it to #
break; // and stop searching
}
}
// invariant: i is the position of a #
return s+i+1; // +1 gets the position after
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.