C 字符处理和字符串操作

C 字符处理和字符串操作,c,string,character,C,String,Character,我刚开始学C。 我正在制作以下程序: #include<stdio.h> #include<ctype.h> int main() { char s1[1000]; char s2 [1000]; /* void countchar (const char * const); */ void reverse(const char * const); char manipulate (char , const char);

我刚开始学C。 我正在制作以下程序:

#include<stdio.h>
#include<ctype.h>

int main()
{
    char s1[1000];
    char s2 [1000];
 /*    void countchar (const char * const);  */
    void reverse(const char * const);
    char manipulate (char , const char);

    printf ("Enter sentence number 1:\n");
gets (s1);
printf ("\nEnter sentence number 2:\n");
gets (s2);

printf ("\nThe two sentences entered are:\n1. %s\n2. %s\n\n", s1, s2);

/*    printf ("_______________________________________\n\n");
countchar (s1, s2);     */

printf ("_______________________________________\n\n"
        "The first sentence reversed is:\n");
reverse (s1);
printf ("\n________________________________________\n");

manipulate (s1, s2);

return 0;
}

void reverse (const char * const s1Ptr)
{
    if (s1Ptr [0] == '\0')
        return;
    else /*{
           if (isupper (s1Ptr [0]))
                tolower (s1Ptr [0]);
                    else toupper (s1Ptr [0]);
*/
    reverse (&s1Ptr[1]);
    putchar (toupper (s1Ptr [0]));
}


char manipulate(char s1, const char s2)
{
printf ("10 characters of first sentence + 10 characters of second sentence:\n%s", strncat (s1, s2, 10));
}
程序将读两句话,然后 计算字符数, 颠倒第一句话,将所有小写字母转换为大写字母,反之亦然, 并将第二段中的10个字符附加到第一段中

用于附加字符的函数Operation不起作用。你能帮我修一下吗? 在函数反转中,如何将案例转换为相反的情况?因为我只能从小写到大写

带/*的部分是因为我不知道如何生成函数。我真的需要帮助,请指出我的错误并帮我改正。
谢谢。

我在您发布的代码中添加了注释:

void reverse (const char * const s1Ptr)  // don't define as const
{
    if (s1Ptr [0] == '\0')               // testing agaist 0 will do
        return;
    else /*{
        if (isupper (s1Ptr [0]))
            tolower (s1Ptr [0]);         // nothing done with the result
        else toupper (s1Ptr [0]);        // nothing done with the result
*/
    reverse (&s1Ptr[1]);                 // recursion? A simple loop would do
    putchar (toupper (s1Ptr [0]));       // OP: "Function will only uppercase it"
}
使用指向字符的更简单方法重写此代码。您仍然需要反转两个字符串中的一个,但我将把它留给您来解决

void reverse (char * s1Ptr)              // don't define as const
{
    if (*s1Ptr == 0)                     // terminate recursion
        return;
    else {
        if (isupper (*s1Ptr))            // simpler way of writing s1Ptr[0]
             *s1Ptr = tolower (*s1Ptr);  // put result back in the string
        else *s1Ptr = toupper (*s1Ptr);  // because you manipulate it later
    }
    putchar (*s1Ptr);                    // swapped last two lines round
    reverse (s1Ptr+1);                   // simpler way of pointing to next character
}

用于附加字符的函数Operation不起作用。是的

它的签名是错误的。它应该是char*s,而不是单个char。void reverse const char*const s1Ptr不应该是const参数,因为函数会改变*s1Ptr,尽管已注释掉。这个函数也是递归的,这是您想要的吗?注意-有一些库函数strupr和strlwr对字符数组字符串进行操作。为什么要重新发明轮子?char操纵char,const char;->字符操作字符*,常量字符*;“包括@RedAlert在哪一行?”WeatherVane那么你建议这个论点是什么?是的,我希望它是递归的。我还没有学习strupr和strlwr,我想学习实现touper和tolower。你能帮我吗?