修剪char *的结尾

时间:2012-12-03 12:43:43

标签: c char trim

拥有char double[] = "1.2345678";后,我必须在. char *之后的"1.234"之后修剪第4位及以上的所有数字,即将其设为{{1}}。

3 个答案:

答案 0 :(得分:3)

找到'.',前进四步,然后将字符串终结符放在那里。

请注意,如果数字后面的数字少于三位,则不要自行传递字符串终结符。

为了帮助您找到点,请查找strchr功能。

答案 1 :(得分:2)

一个明显的解决方案是用NUL替换字符,如下所示:

char *foo = strdup("1.2345678");   // FIXME: check return value
foo[5] = '\0';

请注意,确切位置可能会有所不同,取决于“。”之前出现的位数。字符。

对字符串foo进行迭代,如果遇到'。'则更改passed_dot中的状态,并在另外4个字符后插入NUL

char *p = foo;
int i = 0;
int passed_dot = 0;
while (p && *p) {
        if (*p == '.') passed_dot = 1;
        if (passed_dot) i++;
        if (i == 4) {
                *p = '\0';
                break;
        }

        p++;
}

如果你买不起更多内存,你可以strdup()生成的字符串和free()旧字符串以节省内存:

new_str = strdup(foo);   // and don't forget to check for NULL
free(foo);

答案 2 :(得分:2)

请注意

char * double= "1.2345678";

声明一个字符串文字。这是const所以不能直接修改。要获得可修改的字符串,可以将其声明为

char double[] = "1.2345678";

char* double = strdup("1.2345678");

然后按照其他答案的建议插入一个空字符。