C 字符处理和字符串操作
我刚开始学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);
#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。你能帮我吗?