繁体   English   中英

用C删除字符串中的空格并将其覆盖为驼峰格式

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM