c++ 如何在C中的标点符号后留出空间

vc9ivgsu  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(76)

我的作业是一些特定的标点符号,句号(.)、逗号(,)、冒号(:)、分号(;)、问号(?)和感叹号(!)后面应该有一个空格。例如,以下字符串应该被更正,因为上面的标点后面没有空格。(可能还有其他一些标点符号需要在后面加一个空格;然而,如果使用标点符号(.,:;?!我看见你踢足球了你踢得真好你好吗你好吗很好谢谢你好吗你好吗很好谢谢你好吗
我试图在所有标点符号后腾出空间,但我得到了错误

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char string[200];
scanf("%s", string[200]);
char string1[200] = " ";
for(int i=0;i<strlen(string);i++){
if( s[i] !='.' && ',' && ';' && ':' && '!' && '?'){

  string1 = string1 + string[i];

}


else{

  string1= string1 + string[i] + " ";

}
}
string = string1;
printf("new string : %s", string);
return 0;
}

字符串
谁能帮我把我的c++代码转换成C

using namespace std;
int main()
{
string s;
cout<<"Please enter the string"<<endl;
cin>>s;

cout<<"Input string:"<<s<<endl;
string s1="";
for(int i=0;i<s.length();i++)
{
    if(s[i]!='.'&&s[i]!=','&&s[i]!=';'&&s[i]!=':'&&s[i]!='!'&&s[i]!='?')
    s1=s1+s[i];
    else
    s1=s1+s[i]+" ";
}
s=s1;
cout<<"Updated string:"<<s<<endl;
return 0;
}


我试图使空间,但不能在C郎可以有人想出?

s71maibg

s71maibg1#

运算符+不适用于char[]类型的操作数。您只需将字符复制到string1

for(int i = 0, i1 = 0, string_length = strlen(string); i < string_length; i++)
{
    string1[i1++] = string[i];

    if (string[i] is one of the punctuation characters)
        string1[i1++] = ' ';
}

字符串
我把strlen调用移到了for循环的初始化部分,这样它只被调用一次,而不是多次。
但是请注意这段代码的一个小问题。如果标点符号后面已经有一个空格,那么结果字符串将有两个空格。如果你不同意,那么你必须添加更多的代码。

2uluyalo

2uluyalo2#

我正在重写类似的东西,这个问题基本上是解析101“Hello World”。
我重写了你的for循环

for (int i = 0; i < s.length(); i++)
{
     if (ispunct(s[i]))
     {
          if (s[i] == '.' || '!' || '?' || ',')
          {
              t = t + s[i] + ' ';
          }
          else
          {
               t = t + s[i];
          }
     }
     else
     {
     t = t + s[i];
     }
}

字符串
s是字符串1,t是字符串2。
最大的变化是使用了ispunct函数,它检查输入的字符是否是标点符号。
第二大变化是在比较中从逻辑AND转换为逻辑OR。
第三个最大的变化是我把比较变成了一个等价的测试“==",而不是一个“!=”不等价的测试。
在对程序中的文本输入进行标记化、解析或格式化时,它是一个非常有用的小代码块。

相关问题