给定一个字符串和两个字符,我想找到第一个字符存在于字符串上的次数,它首先出现在什么位置并创建一个新字符串,其中第二个字符每次显示时替换第一个字符,但是我在最后一部分遇到了问题。这就是我到目前为止所做的:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
main ()
{
char string[10], string1;
char c1, c2;
int contador, i, l, n, contador2;
printf ("Introduza uma string e dois caracteres.\n");
scanf ("%s %c %c", string, &c1, &c2);
l = strlen (string);
contador = 0;
for (n = 0; n < l; n++)
{
if (c1 == string[n])
{
contador = contador + 1;
}
}
for (n = 0; n < l; n++)
{
if (c1 == string[n])
{
contador2 = n + 1; /*Dá-se o valor de n + 1 à variável contador2 porque n começa em 0*/
break;
}
}
string1 = (char) malloc ((l +1)*sizeof(char));
for (n = 0; n < l; n++)
{
if (c1 == string1[n])
{
n = c2;
}
}
printf ("%d\n", contador);
printf ("%d\n", contador2);
printf ("%s", string1);
}
我很感激您提供的任何帮助。
答案 0 :(得分:1)
您对string1
的声明是错误的。它不应该是char
,而是指向char
,char*
的指针。那么你也不会想要转换malloc
的返回值。
一些小提示:
sizeof(char)
为1
,malloc
计算其分配的大小char
。答案 1 :(得分:0)
将string1
声明为char *
char *string1;
然后将内存分配为
string1 = malloc ((l + 1)*sizeof(char));
答案 2 :(得分:0)
string1
只是一个字母 - 声明string1
为char * string1
。你替换字符的for循环也搞砸了。它应该是:
for (n = 0; n < l; n++)
{
if (c1 == string[n])// You should compare with string and not string1
{
string1[n] = c2;
}
else
string1[n]=string[n];
}
此外,无需在C中转换malloc返回 - malloc返回void*
。您的完整更正代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main ()
{
char string[10],* string1;
char c1, c2;
int contador, i, l, n, contador2;
printf ("Introduza uma string e dois caracteres.\n");
scanf ("%s %c %c", string, &c1, &c2);
l = strlen (string);
contador = 0;
for (n = 0; n < l; n++)
{
if (c1 == string[n])
{
contador = contador + 1;
}
}
for (n = 0; n < l; n++)
{
if (c1 == string[n])
{
contador2 = n + 1; /*Dá-se o valor de n + 1 à variável contador2 porque n começa em 0*/
break;
}
}
string1 = malloc ((l +1)*sizeof(char));
for (n = 0; n < l; n++)
{
if (c1 == string[n])
{
string1[n] = c2;
}
else
string1[n]=string[n];
}
printf ("%d\n", contador);
printf ("%d\n", contador2);
printf ("%s", string1);
}
我很感激您提供的任何帮助。
请开始缩进代码。缩进比解决问题花了我更多时间。