#c #arrays
#c #массивы
Вопрос:
Я хочу напечатать аббревиатуру слова Написать программу на C, которая должна принимать название организации от пользователя в виде строки. Вы должны реализовать следующую функцию для этой строки:
Например:
Word = аббревиатура Pakistan State Oil
: PSO Только заглавные буквы из слова
Он печатает только 1 слово.
Код :
#include <iostream>
using namespace std;
void printAbbrevation(char Word[], char WordAbb[]);
int findLength(char Word[])
{
int length = 0;
for (int i = 0; Word[i] != ''; i )
{
length ;
}
return length;
}
void findAbbrevation(char Word[])
{
int WordLength = findLength(Word);
char WordAbb[] = {0};
for (int i = 0; i < WordLength; i )
{
if (Word[i] >= 'A' amp;amp; Word[i] <= 'Z')
{
WordAbb[i] = Word[i];
}
}
printAbbrevation(Word, WordAbb);
}
void printAbbrevation(char Word[], char WordAbb[])
{
int abbword = findLength(WordAbb);
cout << "Abbrevation of " << Word << " is = ";
for (int i = 0; i < abbword; i )
{
cout << WordAbb[i];
}
}
int main()
{
char Word[100] = {0};
cout << "Enter the Word = ";
cin.getline(Word,100);
cout << "Length of Word is = ";
cout << findLength(Word);
cout << endl;
findAbbrevation(Word);
return 0;
}
Комментарии:
1. Несколько вещей. Ваш WordAbb недостаточно длинный для хранения результатов, поэтому у вас неопределенное поведение. Во-вторых, вы устанавливаете
i
й символ WordAbb, в отличие от правильного первого, второго, третьего и т.д. Вам понадобится второй индекс.
Ответ №1:
Вам нужно изменить свою findAbbrevation()
функцию следующим образом:
void findAbbrevation(char Word[])
{
int WordLength = findLength(Word);
char WordAbb[25] = {0};
int j = 0;
int flag = 0;
for (int i = 0; i < WordLength; i )
{
// To continue untill we get a space
// this marks the start of the new word
if(flag)
{
if(Word[i] == ' ')
{
flag = 0;
}
continue;
}
else
{
if (Word[i] >= 'A' amp;amp; Word[i] <= 'Z')
{
WordAbb[j ] = Word[i];
flag = 1;
}
}
}
printAbbrevation(Word, WordAbb);
}
Изменения, которые я внес, следующие:
- Сохраняйте флаг, когда найдете новое слово, что делается путем проверки наличия пробелов в строке.
- Для каждого нового найденного слова добавляйте его первый символ в строку сокращения.
- Сохраните отдельный счетчик для строки сокращения.
Ответ №2:
Поскольку вы используете C
and not C
, я предлагаю вам использовать string
вместо char[]
, поскольку может быть проще обрабатывать предложения и выполнять операции с ними таким образом, особенно если вы пришли с языка более высокого уровня, или если вы совсем новичок.
Если вы хотите напечатать первую букву каждого слова в строке, вы можете выполнить итерацию по строке следующим образом:
void printFirstLetter(string sentence) {
int i;
for (i = 0; i < sentence.length(); i )
{
//Print the first letter
if (i == 0)
cout<<sentence[i];
// Find the space separating the words, then print the next first letter again.
if (sentence[i] == ' ')
{
cout<<sentence[i-1]<<" "<<sentence[i 1];
}
}
}
Например, если у вас есть «Джордж любит кошек», вы получите: G L C
.
Поскольку вы используете C
и нет C
, вы можете использовать string
вместо символов. Это может помочь решить некоторые проблемы, если вы новичок в программировании.
Комментарии:
1. Я бы рекомендовал вводить параметры по постоянной ссылке. Вы также печатаете дополнительные символы и пробелы…
2. Спасибо! Не стесняйтесь улучшать ответ.
Ответ №3:
Вы можете попробовать это, используя современный C .
#include <iostream>
#include <sstream>
#include <string>
const std::string findAbbrivation(const std::stringamp; sentance){
std::istringstream ss(sentance);
std::string word;
std::string resu<
while(std::getline(ss, word, ' ')) {
result = std::toupper(word[0]);
}
return resu<
}
int main(){
std::cout << findAbbrivation("Pakistan State Oil") << std::endl;
}
Идея заключается в том, что вы разбиваете свою строку на пробелы, а затем преобразуете первую букву, а затем объединяете ее в результирующую строку. Вы можете прочитать о getline здесь.