我的字符串长度是常量,但实际数据长度将如下所示变化,
" 1,54" // will be displayed as "- 1,54"
"123456789012,12" // will be dsiplayed as "- 123456789012,12"
答案 0 :(得分:5)
在显示数据时,在格式字符串中放一个' - '不是最容易吗?
printf("-%f", 1.54);
答案 1 :(得分:4)
我建议在这种情况下使用 sprintf()。
我更新了代码,因此它会丢弃开头的所有空格,但是1.这样你就会得到 - 符号后跟一个空格,然后是数字。我在代码中留下了一些注释以及一些注释 printf(),以帮助您根据需要调试代码。
#include <stdio.h>
int main()
{
char* num = " 1,54";
int c = 0;
if (strlen(num) > 0)
{
c = num[0]; // Safely storing the first character. Is it a whitespace?
}
else
{
printf("String is empty!\n");
return -1;
}
int wspace_count = 0; // number of whitespaces detected
while (c == 32) // ASCII 32 = whitespace
{
c = num[wspace_count];
if (c == 32)
wspace_count++;
}
//printf("whitespaces detected: %d\n", wspace_count);
//printf("total chars in num: %d\n", strlen(num));
int chars_to_copy = strlen(num) - wspace_count+1; // +1 becouse you want to leave 1 whitespace there, right?
//printf("chars_to_copy: %d\n", chars_to_copy);
int tmp_size = chars_to_copy + 1; // another +1 becouse you need to append '\0' at the end
char* tmp = malloc(tmp_size);
int pos = wspace_count - 1;
strncpy(tmp, &num[pos], chars_to_copy);
tmp[strlen(tmp)] = '\0'; // add '\0' at the end
//printf("tmp = \"%s\" \n", tmp);
char* result = (char*) malloc(strlen(tmp) + 3); // 1 byte for the - sign, 1 for the space after it, 1 for the '\0' at the end
sprintf(result, "- %s", tmp);
printf("%s\n", result);
return 0;
}
<强>输出:强>
- 1,54
答案 2 :(得分:0)
我会做那样的事情:
假设str1
是旧字符串
int strLen1 = strlen(str1);
char * newStr = malloc(sizeof(char) *(strLen1+ 2));
*newStr = '-';
++newStr;
strcpy(newStr , str1);
你可以完全避免strlen()
一起完成并做
char * newStr = malloc(sizeof(str1)+1);
*newStr = '-';
++newStr;
strcpy(newStr , str1);
但请记住,sizeof(str1)
将返回的内容取决于您定义str1
的方式。
不要忘记free()
答案 3 :(得分:0)
我猜你不想打印空格,所以:
char str[LEN] = " 1,54";
char *nid = str;
while (*nid == ' ') {
*nid = '-';
nid++;
}
printf("%s", --nid);
答案 4 :(得分:0)
我猜你是法国人,= =十进制,如果是这样,那么按位操作和计算这两个补码应该有效。
伪代码中的:
temp = 2700;
newtemp = ~temp;
newtemp = newtemp + 1; //Two's compliment
答案 5 :(得分:0)
我已经实现了以下功能来执行我的要求。将输入字符串转换为数字对我来说不起作用,因为我的字符串有两个部分(“123,54”),逗号分隔。
static char *
fmtsign(char * buffer)
{
char tmpbuf[20];
char number[20];
int i, len, space = 0;
memset(tmpbuf, 0x00, sizeof tmpbuf);
memset(number, 0x00, sizeof number);
len = (int)strlen(buffer);
for (i = 0; i < len; i++)
{
if (buffer[i] == ' ')
{
space++;
}
else
break;
}
strncpy(number, &buffer[space], len - space);
sprintf(tmpbuf, "- %s", number);
memset(buffer, 0x00, sizeof buffer);
strcpy(buffer, tmpbuf);
return (buffer);
}
输出:
- 1234567,89
- 123,45
- 0,00