替换字符串malloc中的字符
给定一个字符串和两个字符,我想找到第一个字符存在于字符串上的次数,它首先出现在什么位置并创建一个新字符串,其中第二个字符每次显示时都替换第一个字符,但我是最后一部分有问题。 这是我到目前为止:
#include #include #include 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); }
我很感激您提供的任何帮助。
你的string1
声明是错误的。 它不应该是char
而是指向char
, char*
的指针。 那么你也不会想要转换malloc
的返回值。
一些小提示:
- 不要在一行中声明多个变量,特别是如果它们的类型不同。
- 根据定义,
sizeof(char)
为1
,malloc
计算它在char
数中分配的大小。 - 正确缩进代码。 它不仅使其对其他人更具可读性,而且如果您稍后重新访问代码,您也会自己欣赏它。
将string1
声明为char *
char *string1;
然后分配内存为
string1 = malloc ((l + 1)*sizeof(char));
string1
只是一个char – 声明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 #include #include 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); }
我很感激您提供的任何帮助。
请开始缩进代码。 缩进比解决问题花了我更多时间。