C-如何创建一个改变字符串的函数



我创建了这个程序作为学校的作业。该程序的名字和姓氏被空间分离,然后先于大写第一个和姓氏的第一个字符,然后将其余的字母更改为较低的情况。

我已经成功地做到了,但是我想在函数内进行字母的更改。我以前创建了很多功能,但从未与涉及的字符串相关。据我了解,您必须将指针用于此目的,但我不明白哪种方式。

我的程序代码如下:

//The program only accepts first and last name seperated by 1 space.
#define MAX 31

int main()
{
    char name[MAX];
    int i;
    printf("What is your name? (First name and last name only): ");
    fgets(name, sizeof(name), stdin);
    name[strlen(name)-1] = 0;

    for (i=0; i<strlen(name); i++)
    {
        if (i==0)
            name[i]=toupper(name[i]);
        else if(name[i] == ' ') {
            name[i+1]=toupper(name[i+1]);
            i++;
        }
        else
            name[i]=tolower(name[i]);
    }
    printf("Name = %sn", name);
    return 0;
}

基本上,我想将整个for loop放在功能中。感谢有关该主题的任何帮助。我也非常感谢任何可能为我提供更多知识的链接或网站。

预先感谢。

没有太多:

void myfunc(char name[]) {
    int i;
    for (i=0; i<strlen(name); i++)
    {
        if (i==0)
            name[i]=toupper(name[i]);
        else if(name[i] == ' ') {
            name[i+1]=toupper(name[i+1]);
            i++;
        }
        else
            name[i]=tolower(name[i]);
    }
}

main()

myfunc(name);

在这种情况下,您甚至不必考虑指针。实际上,函数声明中的char name[]将被视为char *namemyfunc(name)中的name将腐烂成指向字符串的第一个字符的指针。但是,由于字符串是无效的,并且您使用strlen(),因此代码保持完全相同。

哦,快速注意:您应该将strlen(name)从循环中取出,然后再做。在每次迭代中调用strlen()以测试循环条件是不必要的且无缺的。

在C和C 中,数组变量(例如name)实际上是指指针。阵列是程序堆栈中的一个内存空间,足够大,可以连续符合所需数量的元素(例如MAX int s)。数组变量是指数组第一个元素的内存地址,并使用[]操作员在引擎盖下执行指针算术以获取所需元素。这就是为什么数组的第一个元素被索引为0:name[0]等于*(name + 0)*name

就像Mah在评论中所说的那样,您可以创建一个接收数组变量作为其参数的函数,该函数将您的for循环作为其身体。

话虽如此,当您将数组传递给函数时,几乎总是有必要通过第二个参数来指代数组的大小(或至少元素的数量)。指针仅参考一个单个内存地址,只有通过仔细使用才能用来表示数组。否则,您最终可能会超出数组的界限并崩溃程序(好结果)或破坏其他内存(不良结果)。

使用C风格的字符串,该约定是将空字符作为最后一个字符,因此strlen()计数字符直到找到它为止。这可能是一个安全的实例,不通过数组的大小。

相关内容

  • 没有找到相关文章

最新更新