操纵文本行

时间:2013-08-31 14:12:56

标签: c string visual-c++

以下代码尝试一次操作几行文本。

1.我的第一个问题是写一个循环来读取几行文本(使用scanf())并在键入的第一个字符是换行符时退出。这些文本行有一些条件:第一个字符必须是介于2和6之间的数字,后跟一个空格和一行文本(< 80)。这个数字将使文本“跳舞”。

2.我的第二个问题是弄清楚如何根据输入的第一个数字将字母从小字母转换为大写字母。我必须运行以进行这些转换,但我不知道如何调用它们来更改文本。例如:如果我输入“3个苹果和香蕉”,正确的输出应该是“AppLes And BanNas”。如你所见,忽略空格,文本始终以大写字母开头。

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <ctype.h>

using namespace std;
void print_upper(string s1);
void print_lower(string s2);
void main(void)
{
    char text[80];
    text[0]='A';//Initialization
    int count_rhythm;

    while (text[0] != '\n'){//To make the loop run until a newline is typed
        scanf(" %79[^\n]",text);
        if(isdigit(text[0])) //To verify that the first character is a number
        {   
            printf("\nGood");//Only to test 
        }
        else
        {
            printf("\nWrong text\n");//Only to test
        }
    }
}

void print_upper(string s1)//Print capital letters
{
    int k1;
    for(k1=0; s1[k1]!='\0'; ++k1)
        putchar(toupper(s1[k1]));
}

void print_lower(string s2)//Print small letters
{
    int k2;
    for(k2=0; s2[k2]='\0'; ++k2)
        putchar(tolower(s2[k2])); 
}

2 个答案:

答案 0 :(得分:0)

您还可以定义一个函数printNthUpper(),该函数将采用字符串和整数n来指定要以大写字母打印的字符。该函数的循环类似于您已有的函数,但是使用条件比较提供的整数值和给定字母的索引来决定是否 调用toupper()(例如printf("%c", i%n == 0 ? toupper(s[i]) : s[i]);)。

答案 1 :(得分:0)

编写一个循环来读取几行文本,您可以将基于条件的无限循环 fgets 结合使用,而不是使用scanf。

char line[80];
char result[80] 

while(1)
{
   fgets(line,sizeof(line),stdin); //read line with fgets
   puts(line);

   if(line[0]=='\n')
      break;

   if((strlen(line)>=4)  &&'2'< =line[0] && line[0] <= '6' && line[1]==' ')
   {
      strcpy(result,change_case_of_nth_char(line));// call change case of nth letter 
   }
   else
   {
      //prompt user to enter input again
   }

}

char *change_case_of_nth_char(char *str)  

{ 

}
相关问题