|
发表于 2023-3-29 21:27:19
From FishC Mobile
|
显示全部楼层
|阅读模式
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
void fun23(char *c,char *s,int n)
{
int i,k=0;
for(i=0;i<n;i++)
{
if(*(c+i)>='0'&&*(c+i)<='9')
{
k++;
*(s+i)=*(c+i);
}
else
break;
}
for(i=k;i<n;i++)
{
if(*(c+i)<'0'||*(c+i)>'9')
*(s+i)=*(c+i);
}
}
void main()
{
char c[99],n,ch[99],i;
gets(c);
n=strlen(c);
fun23(c,ch,n);
for(i=0;i<n;i++)
printf ("%c",ch[i]);
}
要求指针 s 指向的字母数字串中只包含数字与字母,实现除了字符串前的数字字符保留,其他数字字符删除
例如 原本内容为 12345qwe12345asd
删除后为 12345qweasd
我这个定义了两个指针应该只有一个,我不会修改,而且源代码只会输出 12345qwe
请大佬帮忙看看原代码,新代码应该怎么样修改
原代码错误输出的原因有以下几点:
- 在原代码的 fun23 函数中,当检测到非数字字符时,你使用了 break 语句来跳出循环。这意味着你只保留了第一组数字字符,而没有继续检查字符串中的其他字符。正确的做法是在找到非数字字符后继续处理其他字符。
- 在 fun23 函数的第二个循环中,你将所有非数字字符添加到了结果字符串。然而,由于在第一个循环中使用了 break 语句,结果字符串的索引(k 变量)没有得到正确更新。这导致了一些字符被覆盖,从而得到了错误的输出。
为了解决这些问题,我在修改后的代码中进行了如下更改:
- 移除了第一个循环中的 break 语句,以便在找到非数字字符后继续处理其他字符。
- 在第二个循环中,只有当找到非数字字符时,才将其添加到结果字符串。同时,更新结果字符串的索引(k 变量)。
这些更改确保了正确处理字符串中的所有字符,并得到正确的输出。
|
|