C 如何将一个字符从一个字符串复制到另一个字符串?

C 如何将一个字符从一个字符串复制到另一个字符串?,c,arrays,xcode,string,C,Arrays,Xcode,String,这是我的代码:- void sumNumbersInString(char j[100]) { int count = 0; char list[100]; int i; for (i = 0; i < 100; i++){ if (j[i] == '0' || j[i] == '1' || j[i] == '2' || j[i] == '3' || j[i] == '4' || j[i] == '5' || j[i] == '6' || j

这是我的代码:-

void sumNumbersInString(char j[100]) {
    int count = 0;
    char list[100];
    int i;
    for (i = 0; i < 100; i++){
        if (j[i] == '0' || j[i] == '1' || j[i] == '2' || j[i] == '3' || j[i] == '4' || j[i] == '5' || j[i] == '6' || j[i] == '7' || j[i] == '8' || j[i] == '9'){
            count++;
            strncpy(list,j, 1);
            printf("%c\n", j[i]);
        }

    }
    printf("Count = %d\n", count);
    printf("Final String: %s\n", list);


}

int main() {
    char s[100] = "hello100supach4ier78hu";
    sumNumbersInString(s);
    return 0;
} 
void sumnumberinstall(char j[100]){
整数计数=0;
字符列表[100];
int i;
对于(i=0;i<100;i++){
如果(j[i]=“0”| j[i]=“1”| j[i]=“2”| j[i]=“3”| j[i]=“4”| j[i]=“5”| j[i]=“6”| j[i]=“7”| j[i]=“8”| j[i]=“9”){
计数++;
strncpy(列表,j,1);
printf(“%c\n”,j[i]);
}
}
printf(“计数=%d\n”,计数);
printf(“最终字符串:%s\n”,列表);
}
int main(){
char s[100]=“hello100supach4ier78hu”;
SumNumberInstalling(s);
返回0;
} 

所以我想做的是,一旦我把数字从字符串中分离出来,我想把数字放到另一个字符串中。。我该怎么做..请帮我初始化
字符列表[100]={0}
以打印正确的字符串

使用赋值语句(不是必需的
strncpy
),因为您正在逐个测试字符串中的字符。。。。和最终列表的递增指针

工作代码

void sumNumbersInString(char j[100]) {
    int count = 0;
    char list[100] = {0};
    int i;
    for (i = 0; i < 100; i++){
        if (j[i] == '0' || j[i] == '1' || j[i] == '2' || j[i] == '3' || j[i] == '4' || j[i] == '5' || j[i] == '6' || j[i] == '7' || j[i] == '8' || j[i] == '9'){

            //strncpy(list,j[i], 1);
           list[count]=j[i];
            count++;
            printf("%c\n", j[i]);
        }

    }
    printf("Count = %d\n", count);
    printf("Final String: %s\n", list);


}

int main() {
    char s[100] = "hello100supach4ier78hu";
    sumNumbersInString(s);
    return 0;
}
void sumnumberinstall(char j[100]){
整数计数=0;
字符列表[100]={0};
int i;
对于(i=0;i<100;i++){
如果(j[i]=“0”| j[i]=“1”| j[i]=“2”| j[i]=“3”| j[i]=“4”| j[i]=“5”| j[i]=“6”| j[i]=“7”| j[i]=“8”| j[i]=“9”){
//strncpy(列表,j[i],1);
列表[计数]=j[i];
计数++;
printf(“%c\n”,j[i]);
}
}
printf(“计数=%d\n”,计数);
printf(“最终字符串:%s\n”,列表);
}
int main(){
char s[100]=“hello100supach4ier78hu”;
SumNumberInstalling(s);
返回0;
}
您只需执行以下操作:

list[count] = j[i];
count++;
您还可以使用“isdigit()”在Unix/Linux系统上测试数字。看

但是,如果要使用strncpy:

strncpy(list + count, j + i, 1);
count++;
此外,正如@Mohan所指出的,请确保列表以NULL结尾。您的初始化是正确的,因为只要有空间容纳终止字符,字符串文字就以NULL结尾。否则,可以安全地初始化列表:

char list[100] = {0}; 

应该做一些小的修改

void sumNumbersInString(char j[100]) {
    int count = 0;
    char list[100] = {0,}; // clean string
    int i, idx; // idx to keep track of final list length
    for (i = 0, idx = 0; i < 100; i++){

        if ( j[i] >= '0' && j[i] <= '9' ) {
            count++;
        } else {
            list[idx] = j[i];
            idx ++;
        }

    }
    printf("Count = %d\n", count);
    printf("Final String: %s\n", list);


}
void sumnumberinstall(char j[100]){
整数计数=0;
字符列表[100]={0,};//清除字符串
int i,idx;//idx跟踪最终列表长度
对于(i=0,idx=0;i<100;i++){

如果(j[i]>='0'&&j[i]仍然结果将不正确,因为在
列表中
空终止是必要的。我认为执行
strncpy
…没有任何意义…如果复制单个字符…@Mohan感谢您的评论,插入终止字符始终是一个好的做法,但是,我不明白为什么您认为这里是必要的y是固定的,我们正在逐个复制元素。初始化
char列表[100]={0}
打印正确的字符串……如果它没有初始化为NULL,也没有以NULL结尾,那么结果将是未定义的。在VS@Mohan中尝试一下。我认为你的建议很好,我更新了答案,但是字符串文字以NULL结尾,因此代码中列表的初始化是正确的,只要lis的大小相同t等于文本中的字符数+1使用isdigit(j[i])检查它是否为数字。(包括ctype.h)