这是我制作的一个程序:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char frase1 [100];
char frase2 [100];
cin >> frase1;
cin >> frase2;
char * parola1 = strtok (frase1, " .");
char * parola2 = strtok (frase2, " .");
int i;
i = strspn (parola1, parola2);
int j;
j = strspn (parola2, parola1);
cout << i << " " << j;
return 0;
}
它应该要求将2个句子存储到frase1
和frase2
中,然后两个标记器设置两个指向其各自数组的第一个单词的指针,然后我应该返回值{{ 1}}和i
,由j
函数给出的整数。
因此,当终端显示时,应该能够放置strspn
和"veritas omnia vincit"
,然后将"vetirsa omnia vincit"
作为输出。
相反,我插入第一个句子,它返回第一个句子的第一个和第二个单词(veritas,omnia)之间的strspn值。
这是尝试隔离出现在我将立即向您展示的更大程序中的问题:
7 7
这个程序收到一个句子,从中删除所有的元音,然后检查新形成的单词中是否有2个是另一个的字谜。
eliminaVocali删除元音 controlloParola在给定时间取一个单词并将其发送给controlloAnagramma controlloAnagramma接受单词并在整个句子中搜索anagram
该程序提供
1 [main] testingstuff 93304 cygwin_exception :: open_stackdumpfile: 将堆栈跟踪转储到testingstuff.exe.stackdump
teststuff是程序名称。
问题应该是controlloAnagramma,我使用#include <iostream>
#include <cstring>
using namespace std;
void eliminaVocali (char [], char []);
int controlloAnagramma (char*, char []);
bool controlloParola (char[]);
int main() {
char frase [10];
cin >> frase;
cout << "yolo1";
char fraseCorretta [100];
cout << "yolo";
eliminaVocali(frase, fraseCorretta);
if (controlloParola(fraseCorretta)) cout << "TRUE!!";
else cout << "FALSE :(";
}
void eliminaVocali (char frase [], char fraseCorretta []){
int counter = 0;
for (int i = 0; i < 100; i++){
if (frase[i] != 'a' && frase[i] != 'e' && frase[i] != 'i' && frase[i] != 'o' && frase[i] != 'u'){
fraseCorretta[counter] = frase[i];
counter++;
}
}
}
bool controlloParola (char frase []){
char * parola = strtok (frase, " .");
if (controlloAnagramma (parola, frase) > 2) return true;
while (parola != NULL){
parola = strtok(NULL, " .");
if (controlloAnagramma (parola, frase) > 2) return true;
}
return false;
}
int controlloAnagramma (char * parola, char frase []){
int counter = 0;
char * check = new char [100];
check = frase;
char * parola2 = strtok (check, " .");
if (strlen(parola) == strlen(parola2) && strlen(parola) == strspn(parola, parola2) && strlen(parola) == strspn(parola2, parola)) counter++;
while (parola2 != NULL){
parola2 = strtok (NULL, " .");
if (strlen(parola) == strlen(parola2) && strlen(parola) == strspn(parola, parola2) && strlen(parola) == strspn(parola2, parola)) counter++;}
delete[] check;
return counter;
}
和strlen
。
知道可能有用的事实:主要的2 yolo strspn
都没有打印过。
请注意这是一个教学计划,我只能在cout
使用c ++。
问题是,为什么<cstring>
命令会以这种方式运行?它应该解决大计划。提前谢谢。
编辑:
strspn
Shoud be:
cin >> frase1;
cin >> frase2;
正如@ anton-savin指出的那样。
另外
cin.getline(frase1, 100);
cin.getline(frase2, 100);
应该是
check = frase;
无论如何都会出现错误。
答案 0 :(得分:2)
cin >> frase1;
cin >> frase2;
operator>>
逐字逐句地读取字符串,因此frase1
变为"veritas"
而frase2
变为"omnia"
。要逐行阅读输入,请使用getline
:
cin.getline(frase1, 100);
cin.getline(frase2, 100);