C ++ не может получить пользовательский ввод для strtok

Я продолжаю сталкиваться с проблемой с этим кодом в C ++:

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>

using namespace std;

int main ()
{
string words[25];
int i = 0;
char * word;
cout << "Input a phrase, no capital letters please.";
char phrase[100] = "this is a phrase";
word = strtok (phrase, " ,.");

while (word != NULL)
{
i++;
words[i] = word;
cout << words[i] << " ";
word = strtok (NULL, " ,.-");
int g = 0;
}
cout << endl << endl;

int g = 0;
while (g < i)
{
g++;
char f = words[g].at(0);
if ((f == 'a') || (f == 'e') || (f == 'i') || (f == 'o') || (f == 'u') || (f == 'y'))
{
words[g].append("way");
cout << words[g] << " ";
}
else
{
words[g].erase (0,1);
cout << words[g] << f << "ay" << " ";
}

}
cout << endl;
system("PAUSE");
}

Я на самом деле хочу, чтобы пользователь моей программы генерировал фразу, которая будет помещена в символьную фразу [100], но я не могу понять правильный синтаксис, чтобы инициировать ввод в нее, не испортив перевод.

Это программа, которая переводит фразы на латинский язык BTW.

0

Решение

То, что вы хотите, это:

char phrase[100];
fgets(phrase, 100, stdin);

Хотя, как указано в комментариях и других ответах, вы используете строковые функции C в C ++, и это очень странно. Вы не должны делать это, если вам не требуется задание или что-то еще.

Вместо этого используйте:

string input;
getline(cin, input);

Для токенизации вы можете сделать следующее:

string token;
size_t spacePos;
...
while(input.size() != 0)
{
spacePos = input.find(" ");
if(spacePos != npos)
{
token = input.substr(0, spacePos );
input = input.substr(spacePos  + 1);
}
else
{
token = input;
input = "";
}

// do token stuff
}

Или, чтобы пропустить весь этот джаз:

string token;

while(cin >> token)
{
// Do stuff to token
// User exits by pressing ctrl + d, or you add something to break (like if(token == "quit") or if(token == "."))
}
2

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

Предпочтительным способом выполнения терминального ввода / вывода в C ++ являются потоки. использование std::cin и std::getline функция для чтения строк из ввода вывода.

std::string input;
std::getline(std::cin, input);

После этого вы, вероятно, хотите избавиться от strtok и посмотри на это вопрос чтобы понять, как сделать токенизацию строк в C ++.

2

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