0

我是 C++ 编程的新手。我有一个字符串和一个整数,我想将它们合并到一个 char 数组中,然后我想拆分它并获取字符串和整数。我编写了一段代码,它几乎可以工作。唯一的问题是它有时会在字符串的末尾产生一些垃圾。我搜索了这个论坛,但没有找到合适的解决方案。我究竟做错了什么?有没有更简单的解决方案?先感谢您。这是我的代码:

#include <iostream>
#include <fstream>
#include <string.h>
#include <stdlib.h>
using namespace std;

int main() {
    cout << "string: ";
    char my_string[64];
    cin >> my_string;
    int i = 666;
    char i_size[8];
    sprintf( i_size, "%9d", i );
    strcat( my_string, i_size );
    cout << my_string << endl;
    char temp1[9] = { 0 };
    strncpy( temp1, my_string + ( strlen( my_string ) - 9 ), 9 );
    int in = atoi( temp1 );
    cout << "int = " << in << endl;
    char temp2[strlen( my_string ) - 9];
    strncpy( temp2, my_string, strlen( my_string ) - 9 );
    cout << "string = " << temp2 << "|" << endl;
    return 0;
}

这是输出:

[corneliu@localhost prog-build]$ ./prog
string: e
e      666
int = 666
string = e|
[corneliu@localhost prog-build]$ ./prog
string: wewewewe
wewewewe      666
int = 666
string = wewewewe�@|
[corneliu@localhost prog-build]$
4

1 回答 1

1

您使用固定大小,如果它们大于您的情况下的 7 个字符,则会产生垃圾。

猜猜既然你想用 C++ 编码,你应该远离 C“字符串函数”

#include <iostream>
#include <string>

using namespace std;
void main( ... )
{
   int my_int = 666;
   cout << "string: ";
   string my_string;
   cin >> my_string;

   // concat - separated by semicolon in this example
   stringstream ss;
   ss << my_string << ";" << my_int;

   cout << "string and int in one string: "
         << ss.str().c_str() << endl;

   // split
   string tmpStr = ss.str();
   size_t found = tmpStr.find(";");
   while( found != string::npos  )
   {
      cout << tmpStr.substr(0, found).c_str() << endl;
      tmpStr = tmpStr.substr( found+1 );
      found = tmpStr.find(";");

      // this case is true for the last part
      if( found == string::npos )
         cout << tmpStr.c_str() << "\n";
   }

   return 0;
}

根据你想用它做什么,你可能需要尝试将每个字符串部分转换为一个整数,如果它失败了,你知道它是一个字符串,否则你可以将它分配给一个整数。

我认为,即使这种方法也不是我在生产代码中真正要做的,它应该给你一个提示,如何从那里做你想做的事情。

于 2013-09-18T13:53:28.660 回答