我正在尝试使用C语言的指针和strcat。这是我学习过程的一部分。

这个想法是用户输入一个包含数字的字符串,并且输出应仅返回数字。
因此,如果用户输入
te12abc输出应为12

这是我的第一次尝试:

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

#define SIZE 10

int main()
{
    char palavra[SIZE];
    char palavra2[SIZE];
    char *pont = palavra;
    char *pont2 = palavra2;

    printf("Insert the string\n");
    scanf("%s", palavra);

    do{
        if (isdigit(*pont)){
            strcat(palavra2, *pont);
        }
        *pont++;
    }while (*pont != '\0');

    printf("\nThe number is:\n%s\n", palavra2);
    return 0;
}


我相信该指针可以按预期工作,但无法理解为什么strcat无法正常工作。

第二次尝试是程序找到一个数字,将该char存储在一个变量中,然后才尝试对该变量使用strcat。这是代码:

int main()
{
    char palavra[SIZE];
    char palavra2[SIZE];
    char temp;
    char *pont = palavra;
    char * pont2 = &temp;

    printf("Insert the string\n");
    scanf("%s", palavra);

    do{
        if (isdigit(*pont)){
            temp = *pont;
            strcat(palavra2, pont2);
        }
        *pont++;
    }while (*pont != '\0');

    printf("\nThe number is:\n%s\n", palavra2);
    return 0;
}


再次给我strcat问题。

最后尝试但没有指针并且仍然strcat无法正常工作。这是代码:

int main()
{
    int i = 0;
    char palavra[SIZE];
    char palavra2[SIZE];
    char temp;

    printf("Insert the string\n");
    scanf("%s", palavra);

    do{
        if (isdigit(palavra[i])){
            temp = palavra[i];
            strcat(palavra2, palavra[i]);
        }
        i++;
    }while (palavra[i] != '\0');

    printf("\nThe number is:\n%s\n", palavra2);
    return 0;
}


你能指出我正确的方向吗?现在不要了,我还能做些什么。

问候,

最爱

最佳答案

删除*(取消引用),

        strcat(palavra2, pont);


strcat期望char*而不是char
但此版本会附加其余全部内容。
您必须创建一个以nul结尾的字符串。

*是没有用的

    *pont++;


这做好了

    pont++;


现在一次

int main()
{
  char palavra[SIZE];
  char palavra2[SIZE];
  char c2[2] = "a";
  char *pont = palavra;
  char *pont2 = palavra2;

  printf("Insert the string\n");
  scanf("%s", palavra);

  do{
    if (isdigit(*pont)){
      c2[0] = *pont;
      strcat(palavra2, c2);
    }
    pont++;
}while (*pont != '\0');

printf("\nThe number is:\n%s\n", palavra2);
return 0;


但是,这太复杂了

int main()
{
  char palavra[SIZE];
  char palavra2[SIZE];


  printf("Insert the string\n");
  scanf("%s", palavra);

  char *pont = palavra;
  char *pont2 = palavra2;

  while (true) {
    char c = *pont ++;
    if (c == 0) break;
    if (isdigit(c)){
       *pont2++ = c;
    }
  };
  printf("\nThe number is:\n%s\n", palavra2);
  return 0;

关于c - 带有指针的c strcat,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9981620/

10-12 15:46