将字符串中的数字乘以2

时间:2019-01-03 00:36:57

标签: c string

我正在编写一个程序,该程序将字符串中的数字乘以2。我想我可能做得很好(这个概念),但是我不断出错,无法编译。这真的使我感到困惑,我不知道错误在哪里。

#include <stdio.h>
char* dvostruko(char* string)
{
int temp2=0;
char* ret = string;
while(*string!='\0') {

    if(*string>='0'&&*string<='9') {
        char* p = string;
        int temp=0;
        while(*p>='0' && *p<='9') {
            temp=temp*10 + *p - '0';
            p++;
        }
        int temp3=temp*2;
        if(temp3/10 > temp/10) {

            while(temp3!=0 && p >= string ) {
                temp2=temp3%10;
                *p = '0' + temp2;
                temp3=temp3/10;
                p--;

            }
        } else {
            p--;
            while(temp3!=0 && p >= string ) {
                temp2=temp3%10;
                *p = '0' + temp2;
                temp3=temp3/10;
                p--;
            }
        }
    }
    string++;
}
return ret;
}

int main()
{
char brojevi[100]="Brojevi 123 i brojevi 223.";
dvostruko(brojevi);
printf("%s",brojevi);
return 0;
}

输入:“数字2、4、75。”

输出:“数字4,8,150。”

1 个答案:

答案 0 :(得分:0)

您必须停在停下来的地方,然后从那里继续读数字。 我为此添加了q 您的检查数字位数的测试错误,只需检查第一位数字是否大于4并按所有char即可将char添加到字符串中。警告,未检查缓冲区大小,因此您可能会溢出它。

#include <stdio.h>
void push(char *s) {
    char prev, cur;
    prev = ' ';
    do {
        cur = *s;
        *s = prev;
        prev = cur;
    } while (*s++ != '\0');
}

char* dvostruko(char* string)
{
    int temp2=0;
    char* ret = string;
    while(*string!='\0') {

        if(*string>='0'&&*string<='9') {
            char* p = string;
            char *q;
            int temp=0;
            int one_more = *p > '4';
            while(*p>='0' && *p<='9') {
                temp=temp*10 + *p - '0';
                p++;
            }
            q = p;
            int temp3=temp*2;
            if(one_more) {
                push(p);
                while(temp3!=0 && p >= string ) {
                    temp2=temp3%10;
                    *p = '0' + temp2;
                    temp3=temp3/10;
                    p--;

                }
            } else {
                p--;
                while(temp3!=0 && p >= string ) {
                    temp2=temp3%10;
                    *p = '0' + temp2;
                    temp3=temp3/10;
                    p--;
                }
            }
            string = q;
        }
        string++;
    }
    return ret;
}

int main()
{
    char brojevi[100]="Brojevi 523 i brojevi 223.";
    dvostruko(brojevi);
    printf("%s\n",brojevi);
    return 0;
}

输出:

Brojevi 1046 i brojevi 446.
相关问题