0
我有一個我沒有寫過的程序。它應該從字符串中刪除空格,並將其轉換爲駱駝格式。例如:從字符串中刪除空格並將其轉換爲駱駝格式C
輸入:Hello World!
應該給:helloWorld!
現在我有幾個關於這個程序的問題。
#include <stdio.h>
#include <ctype.h>
char *convert(char *f) {
char *save = f;
char *output = f;
int in_a_word = 1;
while(isspace(*f)) f++;
for(; *f; f++) {
if(isspace(*f)) in_a_word = 0;
else
{
if(in_a_word) {
*output= tolower(*f);
}
else {
*output = toupper(*f);
}
in_a_word = 1;
output++;
}
*output= '\0';
}
return save;
}
int main(void) {
char str[] = " Hello World\t";
printf("Modified: -->%s<---\n", convert(str));
getchar();
}
我的問題:
char *save = f;
char *output = f;
如果我理解正確的,他們兩人都應該指向F。我寫了一個實驗程序:
int main(void) {
char *s = " Hello";
char *ment = s;
printf("Original:\n-->%s, %p<---\n-->%s, %p<---\n\n", s,s,ment,ment);
while(isspace(*s)) s++;
printf("Modified:\n-->%s, %p<---\n-->%s, %p<---", s,s,ment,ment);
getchar();
}
在這個程序中我保存了s的地址。當我使用第一個printf時,它顯示它們完全平等,並且指向相同的位置。我對s進行了一些修改。這消除了所有的空間,但是保持不變。甚至他們的位置也改變
回到原來的程序。在convert函數中,我們正在返回保存,但尚未修改。所以我的問題是:任何人都可以解釋我們爲什麼要返回保存?和/或我應該參考哪些源材料。我讀了幾本關於指針的書,但沒有人提到過這個。
但是爲什麼它如果我有原始位置呢?根據我編寫的程序(簡短的程序),修改完全沒有改變。一開始,他們都指向同一地點。但是在我修改s後,s的內容和位置發生了變化。基於同樣的邏輯,我保存了f的位置,但不是它應該指向f最初指向的位置,即原始字符串?對不起的解釋,我剛開始指出。 –
,因爲你的'convert'函數返回一個字符指針。如果不保存'f',你最終會返回字符串的結尾(指向空字符)而不是整個字符串(從頭開始) – artm
是的,這是一個很好的答案,謝謝。我已經接受了。 –