транслитерация — C ++ Копирование из массива в массив

Я попытался много предложений решения этой проблемы безуспешно.

У меня есть массив const char длиной 1000, который называется english_line который содержит слова, разделенные пробелом. Этот массив передается в функцию. Эта функция должна использоваться для реализации решения согласно нашему заданию.

Я хочу скопировать содержимое этого массива, одно слово за раз в другой 2D-массив, temp_eng_word

char temp_eng_word[2000][50];
int j;

string line = english_line;
string word;

istringstream iss(line, istringstream::in);
while (iss >> word)
{
for (j=0;j<=2000;j++)
{
strcpy(temp_eng_word[j],word);
}
}

`

Когда я запускаю это, я получаю ошибку:

cannot convert 'std::string* *{aka std::basic_string(char)}' to 'const char*' for argument '2' to 'char* strcpy(char*, const char*)'

Я провел большую часть дня, пытаясь решить эту проблему. очевидно, я относительный новичок в этом.

Любые советы или предложения будут с благодарностью 🙂

0

Решение

использование word.c_str() чтобы получить const char* вне std::string

Кроме того, я не понимаю смысл вашего вложенного for цикл, вы можете сделать что-то вроде этого (используя strncpy скопировать максимум 49 char с нулями, если необходимо, и убедитесь, что последний char строки всегда нуль) :

istringstream iss(line, istringstream::in);
int nWord = 0;
while( (nWord < 2000) && (iss >> word) )
{
strncpy(temp_eng_word[nWord], word.c_str(), 49);
temp_eng_word[nWord][49] = '\0'; /* if it's not already zero-allocated */
++nWord;
}

Обратите внимание, что было бы проще использовать std::vector<std::string> хранить ваши слова:

vector<string> words;
istringstream iss(line, istringstream::in);
while(iss >> word)
{
words.push_back(word);
}

Что можно сделать без использования цикла std::copy :

copy(istream_iterator<string>(iss), istream_iterator<string>(), back_inserter(words));
2

Другие решения

1) Неправильное число циклов (Вы должны исправить свои знания массива)

2) string :: c_str () для преобразования std :: string в char *

0

Обратите внимание на разницу между строкой и массивом символов. Массив Char — это простая структура базового типа данных, а string — это класс, имеющий более сложную структуру. Вот почему вам нужно использовать c_str() функция строки для получения содержимого в виде массива char (a.k.a C-string).

Вы также должны заметить, что c_str() добавляет нулевое завершение (дополнительный символ '\0') в конце его выходного массива.

0

Ты можешь использовать string вместо этого массива temp_eng_word, Подобно,

std::string temp_eng_word;

Надеюсь, что это решит вашу проблему. И цикл не правильный. Пожалуйста, проверьте это, так как вы используете двумерный массив.

0
По вопросам рекламы [email protected]