下面是一个不能按我想要的方式运行的示例代码。
#include <iostream>
using namespace std;
int main()
{
char testArray[] = "1 test";
int numReplace = 2;
testArray[0] = (int)numReplace;
cout<< testArray<<endl; //output is "? test" I wanted it 2, not a '?' there
//I was trying different things and hoping (int) helped
testArray[0] = '2';
cout<<testArray<<endl;//"2 test" which is what I want, but it was hardcoded in
//Is there a way to do it based on a variable?
return 0;
}
在包含字符和整数的字符串中,您如何更换数字?在实现这一点时,在C和C ++中进行它是否有所不同?
答案 0 :(得分:4)
如果numReplace
在范围[0,9]范围内,您可以: -
testArray[0] = numReplace + '0';
如果numReplace
超出[0,9],则需要
numReplace
转换为字符串等效项参考:Best way to replace a part of string by another in c以及SO上的其他相关帖子
此外,由于这是C ++代码,您可以考虑使用std::string
,此处替换,数字到字符串转换等更简单。
答案 1 :(得分:2)
你应该在这里查看ASCII表:http://www.asciitable.com/
它非常舒服 - 总是在Decimal列上查看您正在使用的ASCII值。
在行中:TestArray[0] = (int)numreplace;
您实际上在第一个位置放置了十进制ASCII值为2的字符numReplace + '0'
可以做到这一点:)
关于C / C ++问题,它们在字符和整数方面是相同的......
您应该查找您的号码的开头和结尾。
你应该创建一个如下所示的循环:
int temp = 0, numberLen, i, j, isOk = 1, isOk2 = 1, from, to, num;
char str[] = "asd 12983 asd";//will be added 1 to.
char *nstr;
for(i = 0 ; i < strlen(str) && isOk ; i++)
{
if(str[i] >= '0' && str[i] <= '9')
{
from = i;
for(j = i ; j < strlen(str) && isOk2)
{
if(str[j] < '0' || str[j] > '9')//not a number;
{
to=j-1;
isOk2 = 0;
}
}
isOk = 0; //for the loop to stop.
}
}
numberLen = to-from+1;
nstr = malloc(sizeof(char)*numberLen);//creating a string with the length of the number.
for(i = from ; i <= to ; i++)
{
nstr[i-from] = str[i];
}
/*nstr now contains the number*/
num = atoi(numstr);
num++; //adding - we wanted to have the number+1 in string.
itoa(num, nstr, 10);//putting num into nstr
for(i = from ; i <= to ; i++)
{
str[i] = nstr[i-from];
}
/*Now the string will contain "asd 12984 asd"*/
顺便说一句,最有效的方法可能就是寻找最后一位数字,然后再添加1的值(ASCII再次),因为ASCII中的数字是相互跟随的 - &#39; 0&# 39; = 48,&#39; 1&#39; = 49,依此类推。但我刚刚向您展示了如何将它们视为数字并将它们作为整数使用。希望它有所帮助:)