我正在尝试使用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;
}
你能指出我正确的方向吗?现在不要再做什么了..
此致
favolas
答案 0 :(得分:3)
你使它变得比以往更难。您不需要strcat
:
/* Untested. */
char *pont = palavra;
char *pont2 = palavra2;
while (*pont) {
if (isdigit(*pont))
*pont2++ = *pont;
pont++;
}
*pont2 = 0;
答案 1 :(得分:3)
第三次尝试几乎是正确的。
替换
strcat(palavra2, palavra[i]);
与
strncat(palavra2, palavra+i,1);
我正在传递palavra+i
而不是palavra[i]
cos,前者是一个进步指针而后者是一个字符而strncat
需要指针
这是一个很好的例子来说明如何连接字符串和字符
另外,请确保始终初始化变量
char palavra[SIZE]="";
char palavra2[SIZE]="";
答案 2 :(得分:3)
与您的代码相关的问题:(第一版)
1)你做strcat
但*pont
引用单个字符,它不是以空字符结尾的字符串。
2)你做*pont++;
但是* pont是一个值,而不是一个指针。
对第一版进行此更改:应该没问题。
do{
if (isdigit(*pont)){
*pont2=*pont;
pont2++;
}
pont++;
}while (*pont != '\0');
*pont2='\0';
答案 3 :(得分:1)
删除*(取消引用),
strcat(palavra2, pont);
strcat期望char*
不是char
但这个版本附加了整个休息。
你必须创建一个以空字符结尾的字符串。
而*是没用的
*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;