[英]Removing space from a string and coverting it to camel case format in C
我有一个尚未编写的程序。 应该从字符串中删除空格,然后将其转换为驼峰格式。 例如:
输入:世界您好!
应该给: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做了一些修改。 这将删除s中的所有空格,但ment保持不变。 甚至他们的位置也改变了。
回到原始程序。 在convert函数中,我们将返回save,但尚未对其进行修改。 所以我的问题是:谁能解释我们为什么要退还储蓄? 和/或我应该参考哪些原始资料。 我读了几本有关指针的书,但没有一本提到。
在convert函数中,我们将返回save,但尚未对其进行修改。 所以我的问题是:谁能解释我们为什么要退还储蓄?
save
是存储字符串的原始位置。 请注意,在函数中修改了output
指针:
output++; // output pointer has been modified to point to next character
因此,您无法自行返回output
-您想返回字符串的原始位置。
换句话说,该函数中的两个指针具有不同的用途:
output
是修改字符串内容(此指针在整个函数中都会更改) save
是存储原始字符串位置(此指针在函数内未更改),并将其返回给调用函数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.