You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将字符串中的数字拼接至另一字符串时出现类型转换错误求助

问题:提取字符串中的数字并拼接

我需要将一个字符串中的所有数字拼接至另一个字符串中,编写了如下代码:

char *cif = "1234567890";
char s[100], s1[40] = "", s2[40] = "";
cin.getline(s, 100);

for (int i=0; i<strlen(s); i++)
   if (strchr(cif, s[i]))
       strcpy(s1+1, s[i]);

运行时出现如下错误:

错误:无法从“char”转换为“const char*” [-fpermissive]|


问题原因与解决方法

错误原因

报错的核心是strcpy(s1+1, s[i]);这行代码:strcpy函数的第二个参数要求是字符串指针(const char*),但你传入的是单个字符(char),类型不匹配导致编译失败。而且即使类型没问题,strcpy(s1+1, ...)的写法也会从s1的第二个位置开始覆盖内容,而非追加字符,逻辑本身也不正确。

正确实现方式

直接通过下标操作s1,维护一个索引变量记录当前拼接的位置,找到数字字符就追加到末尾,最后手动添加字符串结束符'\0':

#include <iostream>
#include <cstring>
using namespace std;

int main() {
    char *cif = "1234567890";
    char s[100], s1[40] = "", s2[40] = "";
    cin.getline(s, 100);

    int s1_idx = 0;
    int s_len = strlen(s); // 提前计算字符串长度,避免循环内重复计算浪费性能
    for (int i = 0; i < s_len; i++) {
        // 判断当前字符是否为数字
        if (strchr(cif, s[i])) {
            // 检查是否超出s1的容量(留一个位置存结束符,防止数组越界)
            if (s1_idx < sizeof(s1) - 1) {
                s1[s1_idx++] = s[i];
            }
        }
    }
    s1[s1_idx] = '\0'; // 必须添加字符串结束符,否则输出会出现乱码

    cout << "提取的数字字符串:" << s1 << endl;
    return 0;
}

其他可选方案

也可以使用strncat函数实现,但需要把单个字符包装成指针传入:

// 替换循环内的追加逻辑
if (strchr(cif, s[i])) {
    strncat(s1, &s[i], 1); // 每次追加1个字符
}

不过这种写法需要确保s1初始是合法的空字符串,且同样要注意数组越界问题。


内容的提问来源于stack exchange,提问作者Dragos lupu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 10:42:17