如何用C ++中的整数替换char数组中的某些项?

时间:2014-04-06 18:35:32

标签: c++ arrays char int

下面是一个不能按我想要的方式运行的示例代码。

#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 ++中进行它是否有所不同?

2 个答案:

答案 0 :(得分:4)

如果numReplace在范围[0,9]范围内,您可以: -

testArray[0] = numReplace + '0';


如果numReplace超出[0,9],则需要

  • a)将numReplace转换为字符串等效项
  • b)编写一个函数来替换(a)
  • 中评估的另一部分字符串

参考: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,依此类推。但我刚刚向您展示了如何将它们视为数字并将它们作为整数使用。希望它有所帮助:)