程序应该使用一个接受指向C字符串的指针作为参数的函数,并将字符串中每个句子的第一个字符大写。我输出有问题。这是我的代码:
#include "stdafx.h"
#include <cstring>
#include <iostream>
using namespace std;
void Capitalize(char *);
int _tmain(int argc, _TCHAR* argv[])
{
char sentence[1000];
cout << "Please enter a sentence: " << endl;
cin.getline(sentence, 1000);
char *sentencePtr = sentence;
Capitalize(sentencePtr);
cout << sentencePtr;
cin.get();
return 0;
}
void Capitalize(char *str){
int count;
for(count = 0; count < strlen(str); count++){
if(str[count] = '.'){
count += 2;
toupper(str[count]);
}
}
}
答案 0 :(得分:2)
toupper(str[count]);
这会将字符转换为大写,然后将结果抛出。你想要:
str[count]=toupper(str[count]);
此外,这是一项任务:
if(str[count] = '.'){
您想要进行比较:
if(str[count] == '.'){
答案 1 :(得分:0)
这是一个不错的选择,但是toupper
返回字符的大写版本,它不会修改提供的参数。试试这个:
// note, you must use '==', not '='
if(str[count] == '.')
{
count += 2;
str[count] = toupper(str[count]);
}
作为练习,请尽量避免使用C字符串,并查看是否可以仅使用std::string
类来完成。最终,您将意识到使用std::string
比使用普通的旧C字符串要容易得多。
答案 2 :(得分:0)
您使用的是赋值运算符(=)而不是比较(==),您需要更改:
if(str[count] = '.'){
要:
if(str[count] == '.'){
正如其他人所指出的那样,你对toupper的使用也不是很正确,因为它返回新值,它不会修改orignal,因为它没有参考。
str[count] = toupper(str[count]);
答案 3 :(得分:0)
你这里有一个错字:
if(str[count] = '.')
应该是:
if(str[count] == '.')
此外,str[count] = toupper(str[count]);
答案 4 :(得分:0)
看起来你的比较是错误的。尝试更改
if(str[count] = '.')
到
if(str[count] == '.'){
记住 - &gt; =是赋值运算符 ==是比较运算符
(我认为你的资本化功能是错误的,但我不知道你的性能是否如此)