大写每个句子中的第一个单词

Capitalizing the first word in each sentence

本文关键字:第一个 单词 句子      更新时间:2023-10-16

我需要制作一个程序,将每个句子的第一个字符都大写。例如,如果字符串参数为" hello。我的名字是乔。你叫什么名字?"该功能应操纵字符串,以便包含" Hello。我的名字是乔。你叫什么名字?"我不确定我在做什么错。有什么建议么?这是我的代码:

#include<iostream>
#include<cctype>
#include<cstdlib>
using namespace std;
void capitalize(char sentence[], int const SIZE);
int main()
{
    const int SIZE = 1024;
    char sentence[SIZE];
    cout << "Enter a string:  " << endl << endl;
    cin.getline(sentence, SIZE);
    capitalize(sentence, SIZE);
    system("pause");
    return(0);
}
void capitalize(char sentence[], int SIZE)
{
     char *strPtr;
     int count = 0;
     sentence[0] = toupper(sentence[0]);
     for (int i = 0; i < SIZE; i++)
     {
         strPtr = strstr(sentence[i], ".");
         if (*strPtr == '.')
         {
                     *strPtr = toupper(*strPtr);
         }
     }
     while (sentence[count] != '')
     {
          cout << sentence[count];
          count++;
     }
}
#include <cstring> // need this for strstr()
void capitalize(char sentence[], int SIZE)
{
     char *strPtr;
     int count = 0;
     sentence[0] = toupper(sentence[0]);
     for (int i = 0; i < SIZE; i++)
     {
         strPtr = strstr(&sentence[i], ".");
         //strPtr returns the pointer to 
         //the first occurence of "." after sentence[i]
        if(strPtr==NULL) break;
         if (*strPtr == '.') 
         {
            // you really dont want to do this
            //*strPtr = toupper(*strPtr); 
            // put the suitable code here and everything will work
         }
     }
    //why the while loop? and count?
     while (sentence[count] != '')
     {
          cout << sentence[count];
          count++;
     }
}

您正在做的是大写"。但是显然,您希望下一个角色大写。因此,您会自己写代码的一部分,因为您会发现它更有意义。

首先,如注释中所述,您不包括 cstring。其次,您是在sentence[i]上调用strstr,这是char。您需要sentence + i,这是一个char*。这将修复您的语法错误。

对于逻辑错误,看起来您正在尝试toupper时期。

strPtr = strstr(sentence[i], ".");应在i(包含)开始的字符串中找到第一个阶段。然后,您检查strstr是否找到了任何东西(如果没有找到任何东西。如果找到了序列,则 strPtr,但是strPtr仍然指向目标字符串的第一个字符,即'.'。您应该寻找目标字符串". "然后将一个超过一个句子的逐渐找到下一个句子的第一个字母。不幸的是,没有strstr的安全方法,因为它不会告诉您它看起来很远,因此字符串可能以". "和一个过去掉下数组的过去。您要么需要手动迭代阵列,寻找'.'然后检查该数组,要么使用std::find