对于我的课程,我将用C ++编写一个程序,将句子中的每个字符转换为相反的情况(从上到下,从下到上)。我们应该使用数组和用户定义的方法,这就是我想出的:
#include <iostream>
using namespace std;
// declare variables
int count = 0; // array counter
int i = 0; // loop control
char ch[100]; // each character entered will be stored in this array
char newCh[100]; // this will hold each character after its case has been changed
main()
{
cout << "Enter a sentence." << endl; // prompts user
while ( ch[count] != '\n' ) // loop continues until "enter" is pressed
{
cin >> ch[count]; // store each character in an array
count += 1; // increment counter
}
int convert(); // call user-defined function
}
// even though it isn't necessary, we are using a user-defined function to perform the conversion
int convert()
{
for ( i = 0; i >= 0; i++ )
{
if ( (ch[i] > 64) and (ch[i] < 91)
)
{
newCh[i] = tolower(ch[i]);
}
else
{
newCh[i] = toupper(ch[i]);
}
cout << newCh[i];
}
}
我不知道为什么,但它不起作用。我不相信我的while循环正在终止并执行程序的其余部分。任何建议都将不胜感激。
答案 0 :(得分:0)
while ( ch[count] != '\n' )
中的循环条件是错误的,因为编译器会将ch
中的所有条目初始化为零,并且当您在循环内增加count
时,条件将永远是false
并且你有一个无限循环,导致你超出数组的限制。
超出数组限制的写入会导致undefined behavior,并导致整个程序非法。
我建议您了解std::string
和std::getline
。
答案 1 :(得分:0)
你的for循环有问题 - 你想要(i = 0; i&lt; count; i ++)。你的函数也可以是void,你需要将count值传递给它(你只需要使用convert()调用它而不需要int或void。
答案 2 :(得分:0)
我通过一些修改重写了你的代码。以下代码在我的机器中完美运行 -
#include <iostream>
#include<cstdio>
#include<string>
using namespace std;
void convert(char *, int);
string line;
char input[1024];
char output[1024];
main()
{
cout << "Enter a sentence." << endl;
while (getline(cin, line)) { // POINT 1
cout<< line<<endl;
//converting to char array since you need char array
//POINT 2
for(int i=0; i< line.length(); i++){
input[i]=line[i];
}
convert(input, line.length());
cout<<output<<endl;
input[1024] = {0}; //POINT 3
output[1024] = {0};
}
}
//Custom Convert Method
void convert(char input[], int size){
for(int i = 0; i < size; i++){
if(input[i] >= 'a' && input[i] <= 'z'){
output[i] = toupper(input[i]);
} else {
output[i] = tolower(input[i]);
}
}
}
在这里注意一些要点(在我的评论中) -
要点1:使用getline()
方法读取整行。此处line
是string
POINT 2:,因为你需要char数组我将字符串line
转换为char数组输入[1024]
要点3: input
和output
数组正在重置以使用下一个值;
输出代码:
“Ctrl + C”将终止该程序
希望它会对你有所帮助。
非常感谢。