如何在C语言中实现字符串的左截断?

ipakzgxi  于 2023-06-21  发布在  其他
关注(0)|答案(5)|浏览(178)

我得到一串数字,例如:1234567我想得到离开只有4位数从右到左。输出示例:4567
我尝试使用格式化字符串,并且我还使用“atoi”来尝试像处理整数一样处理它,但我没有成功
这是我的尝试之一:

int main()
{
    char val[20]="1234567";
    
    int num; 
    num = atoi(val);
    sprintf(val, "%-4d", num);
    printf("%s", val);
    return 0;
}
9wbgstp7

9wbgstp71#

你可以试试这个,我不认为阿托依会像你想的那样工作
编辑:以前的答案不起作用,所以试试这个。

#include <stdio.h>
#include <string.h>

void truncStr(char* str, int xlen) {
    int length = strlen(str);
    if (length > xlen) {
        memmove(str, str + (length - xlen), xlen + 1);
    }
}

int main() {
    char str[] = "1234567";
    int xlen = 4;

    printf("Before truncation: %s\n", str);
    truncStr(str, xlen);
    printf("After truncation: %s\n", str);

    return 0;
}
huwehgph

huwehgph2#

别用绳子。解析后用数字做。

int main()
{
    char val[20]="1233456";
    
    int num; 
    num = atoi(val);
    sprintf(val, "%-4d", num % 10000);
    printf("%s", val);
    return 0;
}
h9a6wy2h

h9a6wy2h3#

就像这样

printf("%s", val + 3);

或者计算出的偏移量(如果需要右边的四位数)。

int offset = (int)strlen(val) - 4;
if(offset < 0)
    offset = 0;
printf("%s", val + offset);
2hh7jdfx

2hh7jdfx4#

如果要更改包含这样的字符串的字符数组

char val[20]="1233456";

并希望数组包含其最后四个(或其他数字)字符,然后只需写入

#include <string.h>

//...

size_t n = strlen( val );

if ( n > 4 ) memmove( val, val + n - 4, 5 );

这是一个演示程序

#include <stdio.h>
#include <string.h>

int main( void )
{
    char val[20] = "1233456";

    size_t last_n = 4;

    size_t len = strlen( val );

    if (len > last_n) memmove( val, val + len - last_n, last_n + 1 );

    puts( val );
}

程序输出为

3456

您可以编写一个单独的函数来完成该任务,例如

#include <stdio.h>
#include <string.h>

char *last_n( char *s, size_t n )
{
    size_t len = strlen( s );

    if (len > n) memmove( s, s + len - n, n + 1 );

    return s;
}

int main( void )
{
    char val[20] = "1233456";

    puts( last_n( val, 4 ) );
}

总是尝试编写更通用的代码。
例如,如果数组包含一个不能用int类型的数字表示的数字序列,那么使用函数atoi的方法将不起作用。

nom7f22z

nom7f22z5#

当你得到一个字符串形式的数字时,我猜它会是一个很大的数字。您可以返回另一个仅包含最后4位数字的字符串。

#include <stdio.h>
#include <string.h>

int main()
{
    char val[20]="1233456";
    int length = strlen(val);
    char output[5];
    int outputLength = 0;
    
    for(int i = length - 4; i < length; i++) {
        output[outputLength++] = val[i];
    }
    output[outputLength] = '\0';
    
    printf("%s", output);
    return 0;
}

相关问题